From edd89107d0c73a1e1eead41ebb7bf10f5fecd682 Mon Sep 17 00:00:00 2001 From: erius Date: Fri, 29 Apr 2022 19:29:59 +0300 Subject: [PATCH] server support added --- .idea/compiler.xml | 3 +- .idea/gradle.xml | 3 + Lab5Client/build.gradle.kts | 42 ++ .../classes/java/main/client/Lab5Client.class | Bin 0 -> 1600 bytes .../main/client/commandline/Command.class | Bin 0 -> 1458 bytes ...mandLineHandler$ExecuteScriptCommand.class | Bin 0 -> 3831 bytes .../CommandLineHandler$ExitCommand.class | Bin 0 -> 2754 bytes .../CommandLineHandler$HistoryCommand.class | Bin 0 -> 3638 bytes .../CommandLineHandler$ModeCommand.class | Bin 0 -> 3718 bytes .../commandline/CommandLineHandler.class | Bin 0 -> 9422 bytes .../commandline/CommandRegistry$1.class | Bin 0 -> 231 bytes ...gistry$CommandAlreadyExistsException.class | Bin 0 -> 1104 bytes ...andRegistry$CommandNotFoundException.class | Bin 0 -> 1089 bytes .../CommandRegistry$HelpCommand.class | Bin 0 -> 3373 bytes .../client/commandline/CommandRegistry.class | Bin 0 -> 2668 bytes .../main/client/commandline/LongStrings.class | Bin 0 -> 1819 bytes .../commandline/pdcommands/AddCommand.class | Bin 0 -> 1007 bytes .../pdcommands/AddIfMaxCommand.class | Bin 0 -> 1181 bytes .../pdcommands/AddIfMinCommand.class | Bin 0 -> 1169 bytes .../commandline/pdcommands/ClearCommand.class | Bin 0 -> 867 bytes .../FilterContainsNameCommand.class | Bin 0 -> 1287 bytes .../commandline/pdcommands/InfoCommand.class | Bin 0 -> 1030 bytes .../pdcommands/PeopleDatabaseCommand.class | Bin 0 -> 1491 bytes .../pdcommands/PeopleDatabaseCommands.class | Bin 0 -> 9049 bytes .../PrintFieldDescendingLocationCommand.class | Bin 0 -> 1091 bytes .../pdcommands/RemoveByIdCommand.class | Bin 0 -> 1157 bytes .../commandline/pdcommands/SaveCommand.class | Bin 0 -> 875 bytes .../commandline/pdcommands/ShowCommand.class | Bin 0 -> 982 bytes .../pdcommands/SumOfHeightCommand.class | Bin 0 -> 986 bytes .../pdcommands/UpdateCommand.class | Bin 0 -> 1302 bytes .../java/main/client/net/UDPClient.class | Bin 0 -> 5287 bytes .../build/docs/javadoc/allclasses-frame.html | 44 ++ .../docs/javadoc/allclasses-noframe.html | 44 ++ .../build/docs/javadoc/client/Lab5Client.html | 268 ++++++++ .../javadoc/client/commandline/Command.html | 388 ++++++++++++ ...mmandLineHandler.ExecuteScriptCommand.html | 311 ++++++++++ .../CommandLineHandler.ExitCommand.html | 311 ++++++++++ .../CommandLineHandler.HistoryCommand.html | 311 ++++++++++ .../CommandLineHandler.ModeCommand.html | 311 ++++++++++ .../commandline/CommandLineHandler.html | 431 +++++++++++++ ...egistry.CommandAlreadyExistsException.html | 228 +++++++ ...mandRegistry.CommandNotFoundException.html | 228 +++++++ .../CommandRegistry.HelpCommand.html | 311 ++++++++++ .../client/commandline/CommandRegistry.html | 314 ++++++++++ .../client/commandline/LongStrings.html | 351 +++++++++++ .../client/commandline/package-frame.html | 35 ++ .../client/commandline/package-summary.html | 207 +++++++ .../client/commandline/package-tree.html | 170 ++++++ .../commandline/pdcommands/AddCommand.html | 312 ++++++++++ .../pdcommands/AddIfMaxCommand.html | 312 ++++++++++ .../pdcommands/AddIfMinCommand.html | 312 ++++++++++ .../commandline/pdcommands/ClearCommand.html | 312 ++++++++++ .../pdcommands/FilterContainsNameCommand.html | 312 ++++++++++ .../commandline/pdcommands/InfoCommand.html | 312 ++++++++++ .../pdcommands/PeopleDatabaseCommand.html | 330 ++++++++++ .../pdcommands/PeopleDatabaseCommands.html | 319 ++++++++++ .../PrintFieldDescendingLocationCommand.html | 312 ++++++++++ .../pdcommands/RemoveByIdCommand.html | 312 ++++++++++ .../commandline/pdcommands/SaveCommand.html | 312 ++++++++++ .../commandline/pdcommands/ShowCommand.html | 312 ++++++++++ .../pdcommands/SumOfHeightCommand.html | 312 ++++++++++ .../commandline/pdcommands/UpdateCommand.html | 312 ++++++++++ .../commandline/pdcommands/package-frame.html | 32 + .../pdcommands/package-summary.html | 193 ++++++ .../commandline/pdcommands/package-tree.html | 154 +++++ .../docs/javadoc/client/net/UDPClient.html | 323 ++++++++++ .../javadoc/client/net/package-frame.html | 19 + .../javadoc/client/net/package-summary.html | 139 +++++ .../docs/javadoc/client/net/package-tree.html | 134 ++++ .../docs/javadoc/client/package-frame.html | 19 + .../docs/javadoc/client/package-summary.html | 139 +++++ .../docs/javadoc/client/package-tree.html | 134 ++++ .../build/docs/javadoc/constant-values.html | 121 ++++ .../build/docs/javadoc/deprecated-list.html | 121 ++++ Lab5Client/build/docs/javadoc/help-doc.html | 222 +++++++ Lab5Client/build/docs/javadoc/index-all.html | 449 ++++++++++++++ Lab5Client/build/docs/javadoc/index.html | 75 +++ .../build/docs/javadoc/overview-frame.html | 23 + .../build/docs/javadoc/overview-summary.html | 147 +++++ .../build/docs/javadoc/overview-tree.html | 192 ++++++ Lab5Client/build/docs/javadoc/package-list | 4 + Lab5Client/build/docs/javadoc/script.js | 30 + .../build/docs/javadoc/serialized-form.html | 266 ++++++++ Lab5Client/build/docs/javadoc/stylesheet.css | 574 ++++++++++++++++++ Lab5Client/build/libs/Lab5Client-2.0.jar | Bin 0 -> 74732 bytes Lab5Client/build/libs/connection.properties | 2 + .../build/libs/connection.properties.bak | 2 + Lab5Client/build/libs/lab5.xml | 130 ++++ Lab5Client/build/libs/lab5.xml.bak | 130 ++++ Lab5Client/build/libs/run.bat | 3 + Lab5Client/build/libs/run.bat.bak | 3 + Lab5Client/build/libs/script.txt | 18 + Lab5Client/build/libs/script2.txt | 15 + .../compileJava/previous-compilation-data.bin | Bin 0 -> 7937 bytes Lab5Client/build/tmp/jar/MANIFEST.MF | 3 + Lab5Client/build/tmp/javadoc/javadoc.options | 27 + Lab5Client/build/tmp/shadowJar/MANIFEST.MF | 3 + .../src/main/java/client/Lab5Client.java | 28 + .../main/java/client/commandline/Command.java | 31 + .../commandline/CommandLineHandler.java | 190 ++++-- .../client}/commandline/CommandRegistry.java | 72 ++- .../java/client}/commandline/LongStrings.java | 2 +- .../commandline/pdcommands/AddCommand.java | 16 + .../pdcommands/AddIfMaxCommand.java | 16 + .../pdcommands/AddIfMinCommand.java | 16 + .../commandline/pdcommands/ClearCommand.java | 16 + .../pdcommands/FilterContainsNameCommand.java | 20 + .../commandline/pdcommands/InfoCommand.java | 16 + .../pdcommands/PeopleDatabaseCommand.java | 30 + .../pdcommands/PeopleDatabaseCommands.java | 82 +++ .../PrintFieldDescendingLocationCommand.java | 16 + .../pdcommands/RemoveByIdCommand.java | 21 + .../commandline/pdcommands/SaveCommand.java | 16 + .../commandline/pdcommands/ShowCommand.java | 16 + .../pdcommands/SumOfHeightCommand.java | 16 + .../commandline/pdcommands/UpdateCommand.java | 21 + .../src/main/java/client/net/UDPClient.java | 82 +++ Lab5Core/build.gradle.kts | 29 + ...Database$DatabaseLoadFailedException.class | Bin 0 -> 1228 bytes ...Database$DatabaseSaveFailedException.class | Bin 0 -> 1228 bytes .../main/common/collection/Database.class | Bin 0 -> 403 bytes .../common/collection/PeopleDatabase.class | Bin 0 -> 8016 bytes .../main/common/commandline/Executable.class | Bin 0 -> 307 bytes .../main/common/commandline/Executables.class | Bin 0 -> 12350 bytes .../commandline/response/CommandResult.class | Bin 0 -> 782 bytes .../response/DefaultResponse.class | Bin 0 -> 2188 bytes .../response/PeopleDatabaseResponse.class | Bin 0 -> 1695 bytes .../commandline/response/Response.class | Bin 0 -> 193 bytes .../classes/java/main/common/data/Color.class | Bin 0 -> 1018 bytes .../java/main/common/data/Coordinates.class | Bin 0 -> 3041 bytes .../java/main/common/data/Country.class | Bin 0 -> 1149 bytes .../java/main/common/data/Location.class | Bin 0 -> 4706 bytes .../java/main/common/data/Person.class | Bin 0 -> 11733 bytes .../common/parser/Adapters$ColorAdapter.class | Bin 0 -> 2034 bytes .../parser/Adapters$CoordinateYAdapter.class | Bin 0 -> 1921 bytes .../parser/Adapters$CountryAdapter.class | Bin 0 -> 2067 bytes .../parser/Adapters$HeightAdapter.class | Bin 0 -> 1854 bytes .../parser/Adapters$LocalDateAdapter.class | Bin 0 -> 1941 bytes .../common/parser/Adapters$NameAdapter.class | Bin 0 -> 1435 bytes .../parser/Adapters$PassportAdapter.class | Bin 0 -> 1519 bytes .../java/main/common/parser/Adapters.class | Bin 0 -> 1680 bytes .../common/parser/ConnectionProperties.class | Bin 0 -> 3794 bytes .../java/main/common/util/UtilFunctions.class | Bin 0 -> 2189 bytes .../build/docs/javadoc/allclasses-frame.html | 42 ++ .../docs/javadoc/allclasses-noframe.html | 42 ++ .../Database.DatabaseLoadFailedException.html | 319 ++++++++++ .../Database.DatabaseSaveFailedException.html | 319 ++++++++++ .../javadoc/common/collection/Database.html | 269 ++++++++ .../common/collection/PeopleDatabase.html | 363 +++++++++++ .../common/collection/package-frame.html | 28 + .../common/collection/package-summary.html | 177 ++++++ .../common/collection/package-tree.html | 148 +++++ .../common/commandline/Executable.html | 228 +++++++ .../common/commandline/Executables.html | 471 ++++++++++++++ .../common/commandline/package-frame.html | 23 + .../common/commandline/package-summary.html | 154 +++++ .../common/commandline/package-tree.html | 146 +++++ .../commandline/response/CommandResult.html | 292 +++++++++ .../commandline/response/DefaultResponse.html | 428 +++++++++++++ .../response/PeopleDatabaseResponse.html | 368 +++++++++++ .../common/commandline/response/Response.html | 227 +++++++ .../commandline/response/package-frame.html | 28 + .../commandline/response/package-summary.html | 173 ++++++ .../commandline/response/package-tree.html | 155 +++++ .../build/docs/javadoc/common/data/Color.html | 352 +++++++++++ .../docs/javadoc/common/data/Coordinates.html | 312 ++++++++++ .../docs/javadoc/common/data/Country.html | 376 ++++++++++++ .../docs/javadoc/common/data/Location.html | 330 ++++++++++ .../docs/javadoc/common/data/Person.html | 420 +++++++++++++ .../javadoc/common/data/package-frame.html | 26 + .../javadoc/common/data/package-summary.html | 178 ++++++ .../javadoc/common/data/package-tree.html | 149 +++++ .../common/parser/Adapters.ColorAdapter.html | 304 ++++++++++ .../parser/Adapters.CoordinateYAdapter.html | 304 ++++++++++ .../parser/Adapters.CountryAdapter.html | 304 ++++++++++ .../common/parser/Adapters.HeightAdapter.html | 304 ++++++++++ .../parser/Adapters.LocalDateAdapter.html | 304 ++++++++++ .../common/parser/Adapters.NameAdapter.html | 304 ++++++++++ .../parser/Adapters.PassportAdapter.html | 304 ++++++++++ .../docs/javadoc/common/parser/Adapters.html | 433 +++++++++++++ .../common/parser/ConnectionProperties.html | 281 +++++++++ .../javadoc/common/parser/package-frame.html | 27 + .../common/parser/package-summary.html | 171 ++++++ .../javadoc/common/parser/package-tree.html | 146 +++++ .../javadoc/common/util/UtilFunctions.html | 289 +++++++++ .../javadoc/common/util/package-frame.html | 19 + .../javadoc/common/util/package-summary.html | 141 +++++ .../javadoc/common/util/package-tree.html | 134 ++++ .../build/docs/javadoc/constant-values.html | 171 ++++++ .../build/docs/javadoc/deprecated-list.html | 121 ++++ Lab5Core/build/docs/javadoc/help-doc.html | 222 +++++++ Lab5Core/build/docs/javadoc/index-all.html | 531 ++++++++++++++++ Lab5Core/build/docs/javadoc/index.html | 75 +++ .../build/docs/javadoc/overview-frame.html | 25 + .../build/docs/javadoc/overview-summary.html | 155 +++++ .../build/docs/javadoc/overview-tree.html | 193 ++++++ Lab5Core/build/docs/javadoc/package-list | 6 + Lab5Core/build/docs/javadoc/script.js | 30 + .../build/docs/javadoc/serialized-form.html | 284 +++++++++ Lab5Core/build/docs/javadoc/stylesheet.css | 574 ++++++++++++++++++ Lab5Core/build/libs/Lab5Core-2.0.jar | Bin 0 -> 37831 bytes .../resources/main/connection.properties | 2 + .../compileJava/previous-compilation-data.bin | Bin 0 -> 7203 bytes Lab5Core/build/tmp/jar/MANIFEST.MF | 2 + Lab5Core/build/tmp/javadoc/javadoc.options | 23 + .../java/common}/collection/Database.java | 2 +- .../common}/collection/PeopleDatabase.java | 38 +- .../java/common/commandline/Executable.java | 10 + .../java/common/commandline/Executables.java | 117 ++++ .../commandline/response/CommandResult.java | 22 + .../commandline/response/DefaultResponse.java | 24 + .../response/PeopleDatabaseResponse.java | 19 + .../common/commandline/response/Response.java | 7 + Lab5Core/src/main/java/common/data/Color.java | 12 + .../main/java/common}/data/Coordinates.java | 7 +- .../src/main/java/common}/data/Country.java | 6 +- .../src/main/java/common}/data/Location.java | 7 +- .../src/main/java/common}/data/Person.java | 7 +- .../main/java/common}/parser/Adapters.java | 12 +- .../common/parser/ConnectionProperties.java | 61 ++ .../main/java/common}/util/UtilFunctions.java | 2 +- .../src/main/resources/connection.properties | 2 + Lab5Server/build.gradle.kts | 40 ++ .../classes/java/main/server/Lab5Server.class | Bin 0 -> 1677 bytes .../java/main/server/net/UDPServer.class | Bin 0 -> 6402 bytes .../build/docs/javadoc/allclasses-frame.html | 19 + .../docs/javadoc/allclasses-noframe.html | 19 + .../build/docs/javadoc/constant-values.html | 121 ++++ .../build/docs/javadoc/deprecated-list.html | 121 ++++ Lab5Server/build/docs/javadoc/help-doc.html | 222 +++++++ Lab5Server/build/docs/javadoc/index-all.html | 186 ++++++ Lab5Server/build/docs/javadoc/index.html | 75 +++ .../build/docs/javadoc/overview-frame.html | 21 + .../build/docs/javadoc/overview-summary.html | 139 +++++ .../build/docs/javadoc/overview-tree.html | 136 +++++ Lab5Server/build/docs/javadoc/package-list | 2 + Lab5Server/build/docs/javadoc/script.js | 30 + .../build/docs/javadoc/server/Lab5Server.html | 304 ++++++++++ .../docs/javadoc/server/net/UDPServer.html | 329 ++++++++++ .../javadoc/server/net/package-frame.html | 19 + .../javadoc/server/net/package-summary.html | 139 +++++ .../docs/javadoc/server/net/package-tree.html | 134 ++++ .../docs/javadoc/server/package-frame.html | 19 + .../docs/javadoc/server/package-summary.html | 139 +++++ .../docs/javadoc/server/package-tree.html | 134 ++++ Lab5Server/build/docs/javadoc/stylesheet.css | 574 ++++++++++++++++++ Lab5Server/build/libs/Lab5Server-2.0.jar | Bin 0 -> 42174 bytes Lab5Server/build/libs/connection.properties | 2 + Lab5Server/build/libs/lab5.xml | 0 .../compileJava/previous-compilation-data.bin | Bin 0 -> 618 bytes Lab5Server/build/tmp/jar/MANIFEST.MF | 3 + Lab5Server/build/tmp/javadoc/javadoc.options | 9 + Lab5Server/build/tmp/shadowJar/MANIFEST.MF | 3 + .../src/main/java/server/Lab5Server.java | 27 + .../src/main/java/server/net/UDPServer.java | 96 +++ build.gradle.kts | 18 +- gradle.properties | 1 + lab5.xml | 0 settings.gradle.kts | 2 +- src/main/java/ru/erius/lab5/Lab5.java | 25 - .../ru/erius/lab5/commandline/Command.java | 10 - .../lab5/commandline/DescriptiveCommand.java | 15 - .../commandline/PeopleDatabaseCommands.java | 235 ------- src/main/java/ru/erius/lab5/data/Color.java | 10 - 264 files changed, 29325 insertions(+), 436 deletions(-) create mode 100644 Lab5Client/build.gradle.kts create mode 100644 Lab5Client/build/classes/java/main/client/Lab5Client.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/Command.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler$ExecuteScriptCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler$ExitCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler$HistoryCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler$ModeCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandRegistry$1.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandRegistry$CommandAlreadyExistsException.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandRegistry$CommandNotFoundException.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandRegistry$HelpCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/CommandRegistry.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/LongStrings.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/AddCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/AddIfMaxCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/AddIfMinCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/ClearCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/FilterContainsNameCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/InfoCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/PeopleDatabaseCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/PeopleDatabaseCommands.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/RemoveByIdCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/SaveCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/ShowCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/SumOfHeightCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/commandline/pdcommands/UpdateCommand.class create mode 100644 Lab5Client/build/classes/java/main/client/net/UDPClient.class create mode 100644 Lab5Client/build/docs/javadoc/allclasses-frame.html create mode 100644 Lab5Client/build/docs/javadoc/allclasses-noframe.html create mode 100644 Lab5Client/build/docs/javadoc/client/Lab5Client.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/Command.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ExecuteScriptCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ExitCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.HistoryCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ModeCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.CommandAlreadyExistsException.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.CommandNotFoundException.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.HelpCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/LongStrings.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/package-frame.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/package-summary.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/package-tree.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddIfMaxCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddIfMinCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/ClearCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/FilterContainsNameCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/InfoCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PeopleDatabaseCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PeopleDatabaseCommands.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/RemoveByIdCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/SaveCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/ShowCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/SumOfHeightCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/UpdateCommand.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-frame.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-summary.html create mode 100644 Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-tree.html create mode 100644 Lab5Client/build/docs/javadoc/client/net/UDPClient.html create mode 100644 Lab5Client/build/docs/javadoc/client/net/package-frame.html create mode 100644 Lab5Client/build/docs/javadoc/client/net/package-summary.html create mode 100644 Lab5Client/build/docs/javadoc/client/net/package-tree.html create mode 100644 Lab5Client/build/docs/javadoc/client/package-frame.html create mode 100644 Lab5Client/build/docs/javadoc/client/package-summary.html create mode 100644 Lab5Client/build/docs/javadoc/client/package-tree.html create mode 100644 Lab5Client/build/docs/javadoc/constant-values.html create mode 100644 Lab5Client/build/docs/javadoc/deprecated-list.html create mode 100644 Lab5Client/build/docs/javadoc/help-doc.html create mode 100644 Lab5Client/build/docs/javadoc/index-all.html create mode 100644 Lab5Client/build/docs/javadoc/index.html create mode 100644 Lab5Client/build/docs/javadoc/overview-frame.html create mode 100644 Lab5Client/build/docs/javadoc/overview-summary.html create mode 100644 Lab5Client/build/docs/javadoc/overview-tree.html create mode 100644 Lab5Client/build/docs/javadoc/package-list create mode 100644 Lab5Client/build/docs/javadoc/script.js create mode 100644 Lab5Client/build/docs/javadoc/serialized-form.html create mode 100644 Lab5Client/build/docs/javadoc/stylesheet.css create mode 100644 Lab5Client/build/libs/Lab5Client-2.0.jar create mode 100644 Lab5Client/build/libs/connection.properties create mode 100644 Lab5Client/build/libs/connection.properties.bak create mode 100644 Lab5Client/build/libs/lab5.xml create mode 100644 Lab5Client/build/libs/lab5.xml.bak create mode 100644 Lab5Client/build/libs/run.bat create mode 100644 Lab5Client/build/libs/run.bat.bak create mode 100644 Lab5Client/build/libs/script.txt create mode 100644 Lab5Client/build/libs/script2.txt create mode 100644 Lab5Client/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 Lab5Client/build/tmp/jar/MANIFEST.MF create mode 100644 Lab5Client/build/tmp/javadoc/javadoc.options create mode 100644 Lab5Client/build/tmp/shadowJar/MANIFEST.MF create mode 100644 Lab5Client/src/main/java/client/Lab5Client.java create mode 100644 Lab5Client/src/main/java/client/commandline/Command.java rename {src/main/java/ru/erius/lab5 => Lab5Client/src/main/java/client}/commandline/CommandLineHandler.java (53%) rename {src/main/java/ru/erius/lab5 => Lab5Client/src/main/java/client}/commandline/CommandRegistry.java (50%) rename {src/main/java/ru/erius/lab5 => Lab5Client/src/main/java/client}/commandline/LongStrings.java (95%) create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/AddCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/AddIfMaxCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/AddIfMinCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/ClearCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/FilterContainsNameCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/InfoCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/PeopleDatabaseCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/PeopleDatabaseCommands.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/RemoveByIdCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/SaveCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/ShowCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/SumOfHeightCommand.java create mode 100644 Lab5Client/src/main/java/client/commandline/pdcommands/UpdateCommand.java create mode 100644 Lab5Client/src/main/java/client/net/UDPClient.java create mode 100644 Lab5Core/build.gradle.kts create mode 100644 Lab5Core/build/classes/java/main/common/collection/Database$DatabaseLoadFailedException.class create mode 100644 Lab5Core/build/classes/java/main/common/collection/Database$DatabaseSaveFailedException.class create mode 100644 Lab5Core/build/classes/java/main/common/collection/Database.class create mode 100644 Lab5Core/build/classes/java/main/common/collection/PeopleDatabase.class create mode 100644 Lab5Core/build/classes/java/main/common/commandline/Executable.class create mode 100644 Lab5Core/build/classes/java/main/common/commandline/Executables.class create mode 100644 Lab5Core/build/classes/java/main/common/commandline/response/CommandResult.class create mode 100644 Lab5Core/build/classes/java/main/common/commandline/response/DefaultResponse.class create mode 100644 Lab5Core/build/classes/java/main/common/commandline/response/PeopleDatabaseResponse.class create mode 100644 Lab5Core/build/classes/java/main/common/commandline/response/Response.class create mode 100644 Lab5Core/build/classes/java/main/common/data/Color.class create mode 100644 Lab5Core/build/classes/java/main/common/data/Coordinates.class create mode 100644 Lab5Core/build/classes/java/main/common/data/Country.class create mode 100644 Lab5Core/build/classes/java/main/common/data/Location.class create mode 100644 Lab5Core/build/classes/java/main/common/data/Person.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/Adapters$ColorAdapter.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/Adapters$CoordinateYAdapter.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/Adapters$CountryAdapter.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/Adapters$HeightAdapter.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/Adapters$LocalDateAdapter.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/Adapters$NameAdapter.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/Adapters$PassportAdapter.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/Adapters.class create mode 100644 Lab5Core/build/classes/java/main/common/parser/ConnectionProperties.class create mode 100644 Lab5Core/build/classes/java/main/common/util/UtilFunctions.class create mode 100644 Lab5Core/build/docs/javadoc/allclasses-frame.html create mode 100644 Lab5Core/build/docs/javadoc/allclasses-noframe.html create mode 100644 Lab5Core/build/docs/javadoc/common/collection/Database.DatabaseLoadFailedException.html create mode 100644 Lab5Core/build/docs/javadoc/common/collection/Database.DatabaseSaveFailedException.html create mode 100644 Lab5Core/build/docs/javadoc/common/collection/Database.html create mode 100644 Lab5Core/build/docs/javadoc/common/collection/PeopleDatabase.html create mode 100644 Lab5Core/build/docs/javadoc/common/collection/package-frame.html create mode 100644 Lab5Core/build/docs/javadoc/common/collection/package-summary.html create mode 100644 Lab5Core/build/docs/javadoc/common/collection/package-tree.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/Executable.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/Executables.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/package-frame.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/package-summary.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/package-tree.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/response/CommandResult.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/response/DefaultResponse.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/response/PeopleDatabaseResponse.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/response/Response.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/response/package-frame.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/response/package-summary.html create mode 100644 Lab5Core/build/docs/javadoc/common/commandline/response/package-tree.html create mode 100644 Lab5Core/build/docs/javadoc/common/data/Color.html create mode 100644 Lab5Core/build/docs/javadoc/common/data/Coordinates.html create mode 100644 Lab5Core/build/docs/javadoc/common/data/Country.html create mode 100644 Lab5Core/build/docs/javadoc/common/data/Location.html create mode 100644 Lab5Core/build/docs/javadoc/common/data/Person.html create mode 100644 Lab5Core/build/docs/javadoc/common/data/package-frame.html create mode 100644 Lab5Core/build/docs/javadoc/common/data/package-summary.html create mode 100644 Lab5Core/build/docs/javadoc/common/data/package-tree.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/Adapters.ColorAdapter.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/Adapters.CoordinateYAdapter.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/Adapters.CountryAdapter.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/Adapters.HeightAdapter.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/Adapters.LocalDateAdapter.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/Adapters.NameAdapter.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/Adapters.PassportAdapter.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/Adapters.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/ConnectionProperties.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/package-frame.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/package-summary.html create mode 100644 Lab5Core/build/docs/javadoc/common/parser/package-tree.html create mode 100644 Lab5Core/build/docs/javadoc/common/util/UtilFunctions.html create mode 100644 Lab5Core/build/docs/javadoc/common/util/package-frame.html create mode 100644 Lab5Core/build/docs/javadoc/common/util/package-summary.html create mode 100644 Lab5Core/build/docs/javadoc/common/util/package-tree.html create mode 100644 Lab5Core/build/docs/javadoc/constant-values.html create mode 100644 Lab5Core/build/docs/javadoc/deprecated-list.html create mode 100644 Lab5Core/build/docs/javadoc/help-doc.html create mode 100644 Lab5Core/build/docs/javadoc/index-all.html create mode 100644 Lab5Core/build/docs/javadoc/index.html create mode 100644 Lab5Core/build/docs/javadoc/overview-frame.html create mode 100644 Lab5Core/build/docs/javadoc/overview-summary.html create mode 100644 Lab5Core/build/docs/javadoc/overview-tree.html create mode 100644 Lab5Core/build/docs/javadoc/package-list create mode 100644 Lab5Core/build/docs/javadoc/script.js create mode 100644 Lab5Core/build/docs/javadoc/serialized-form.html create mode 100644 Lab5Core/build/docs/javadoc/stylesheet.css create mode 100644 Lab5Core/build/libs/Lab5Core-2.0.jar create mode 100644 Lab5Core/build/resources/main/connection.properties create mode 100644 Lab5Core/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 Lab5Core/build/tmp/jar/MANIFEST.MF create mode 100644 Lab5Core/build/tmp/javadoc/javadoc.options rename {src/main/java/ru/erius/lab5 => Lab5Core/src/main/java/common}/collection/Database.java (97%) rename {src/main/java/ru/erius/lab5 => Lab5Core/src/main/java/common}/collection/PeopleDatabase.java (76%) create mode 100644 Lab5Core/src/main/java/common/commandline/Executable.java create mode 100644 Lab5Core/src/main/java/common/commandline/Executables.java create mode 100644 Lab5Core/src/main/java/common/commandline/response/CommandResult.java create mode 100644 Lab5Core/src/main/java/common/commandline/response/DefaultResponse.java create mode 100644 Lab5Core/src/main/java/common/commandline/response/PeopleDatabaseResponse.java create mode 100644 Lab5Core/src/main/java/common/commandline/response/Response.java create mode 100644 Lab5Core/src/main/java/common/data/Color.java rename {src/main/java/ru/erius/lab5 => Lab5Core/src/main/java/common}/data/Coordinates.java (90%) rename {src/main/java/ru/erius/lab5 => Lab5Core/src/main/java/common}/data/Country.java (54%) rename {src/main/java/ru/erius/lab5 => Lab5Core/src/main/java/common}/data/Location.java (94%) rename {src/main/java/ru/erius/lab5 => Lab5Core/src/main/java/common}/data/Person.java (98%) rename {src/main/java/ru/erius/lab5 => Lab5Core/src/main/java/common}/parser/Adapters.java (96%) create mode 100644 Lab5Core/src/main/java/common/parser/ConnectionProperties.java rename {src/main/java/ru/erius/lab5 => Lab5Core/src/main/java/common}/util/UtilFunctions.java (98%) create mode 100644 Lab5Core/src/main/resources/connection.properties create mode 100644 Lab5Server/build.gradle.kts create mode 100644 Lab5Server/build/classes/java/main/server/Lab5Server.class create mode 100644 Lab5Server/build/classes/java/main/server/net/UDPServer.class create mode 100644 Lab5Server/build/docs/javadoc/allclasses-frame.html create mode 100644 Lab5Server/build/docs/javadoc/allclasses-noframe.html create mode 100644 Lab5Server/build/docs/javadoc/constant-values.html create mode 100644 Lab5Server/build/docs/javadoc/deprecated-list.html create mode 100644 Lab5Server/build/docs/javadoc/help-doc.html create mode 100644 Lab5Server/build/docs/javadoc/index-all.html create mode 100644 Lab5Server/build/docs/javadoc/index.html create mode 100644 Lab5Server/build/docs/javadoc/overview-frame.html create mode 100644 Lab5Server/build/docs/javadoc/overview-summary.html create mode 100644 Lab5Server/build/docs/javadoc/overview-tree.html create mode 100644 Lab5Server/build/docs/javadoc/package-list create mode 100644 Lab5Server/build/docs/javadoc/script.js create mode 100644 Lab5Server/build/docs/javadoc/server/Lab5Server.html create mode 100644 Lab5Server/build/docs/javadoc/server/net/UDPServer.html create mode 100644 Lab5Server/build/docs/javadoc/server/net/package-frame.html create mode 100644 Lab5Server/build/docs/javadoc/server/net/package-summary.html create mode 100644 Lab5Server/build/docs/javadoc/server/net/package-tree.html create mode 100644 Lab5Server/build/docs/javadoc/server/package-frame.html create mode 100644 Lab5Server/build/docs/javadoc/server/package-summary.html create mode 100644 Lab5Server/build/docs/javadoc/server/package-tree.html create mode 100644 Lab5Server/build/docs/javadoc/stylesheet.css create mode 100644 Lab5Server/build/libs/Lab5Server-2.0.jar create mode 100644 Lab5Server/build/libs/connection.properties create mode 100644 Lab5Server/build/libs/lab5.xml create mode 100644 Lab5Server/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 Lab5Server/build/tmp/jar/MANIFEST.MF create mode 100644 Lab5Server/build/tmp/javadoc/javadoc.options create mode 100644 Lab5Server/build/tmp/shadowJar/MANIFEST.MF create mode 100644 Lab5Server/src/main/java/server/Lab5Server.java create mode 100644 Lab5Server/src/main/java/server/net/UDPServer.java create mode 100644 gradle.properties create mode 100644 lab5.xml delete mode 100644 src/main/java/ru/erius/lab5/Lab5.java delete mode 100644 src/main/java/ru/erius/lab5/commandline/Command.java delete mode 100644 src/main/java/ru/erius/lab5/commandline/DescriptiveCommand.java delete mode 100644 src/main/java/ru/erius/lab5/commandline/PeopleDatabaseCommands.java delete mode 100644 src/main/java/ru/erius/lab5/data/Color.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 1a29e22..8fdb436 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,7 +7,8 @@ - + + diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 611e7c8..a774292 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -9,6 +9,9 @@ diff --git a/Lab5Client/build.gradle.kts b/Lab5Client/build.gradle.kts new file mode 100644 index 0000000..8294567 --- /dev/null +++ b/Lab5Client/build.gradle.kts @@ -0,0 +1,42 @@ +plugins { + java + id("com.github.johnrengelman.shadow") version("7.1.2") +} + +group = "ru.erius.lab5" +version = "2.0" +val mainClass = "client.Lab5Client" + +repositories { + mavenCentral() +} + +dependencies { + testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") + implementation(project(":Lab5Core")) + compileOnly("org.projectlombok:lombok:1.18.22") + annotationProcessor("org.projectlombok:lombok:1.18.22") +} + +tasks.getByName("test") { + useJUnitPlatform() +} + +tasks.compileJava { + options.encoding = "UTF-8" +} + +tasks.javadoc { + options.encoding = "UTF-8" +} + +tasks.shadowJar { + archiveClassifier.set("") + manifest { + attributes( + "Manifest-Version" to "1.0", + "Main-Class" to mainClass + ) + } +} diff --git a/Lab5Client/build/classes/java/main/client/Lab5Client.class b/Lab5Client/build/classes/java/main/client/Lab5Client.class new file mode 100644 index 0000000000000000000000000000000000000000..5b03d816f4e55381819891526947326ca2610827 GIT binary patch literal 1600 zcma)6?Q+{h6g?X&-da^Ynh%qtgr=pXPTE8e(zGA-Plr-QHDCN&u-Z3h&PO{_m}H z>Y++g%`|sBKkjtm$o1ne)V{HC2mV(Fhk`%`i%QxCXaN*b5XSAcP6QTuKo7GZbd8Qk zT`&K~5GB9U61YCNs)3@SR!E-QdhcvFdu((%q5XJQ$K6m5a0y%~fWJRvL$9$$ru-jv zRX1l?Vo73K;#1a^6&0`>@nPcYZ4zaQ^dH@8hG7R&n5NB%n$8X$V}}tOe1^{@JO{hR zXz4VS!&pqPJqJ%PEwL}KdD?z(v$Lp|_`<=LXgGL^uOto}e2s4$Jj1sRuHhXA&kdLh zr`ktg@}y^;G+(gV0&}^lpgIEA`Vr2qia@2UvtC67)@lWPc~%FUr}IvfW-9W@{&H>k zfA_*h0laRj4>om&nXmV{iS0U<=ys51IvG%X@@ugVzJQH;>J%* z(_xdxha`Ho$3hUh`<&K{Gpkj{bRP-W)oH5Qy#EaEe^R6VTyw;7-LR{G?3zF!XL`1X zb@TA(mjP2-wH@;|jFROf!(~kJtux;U_yl2^>kK8AyWl>$@*3h*{(F{dIak`K^6c~s z@CN26RWOeQYK-$=C}EWQ?WvJtl)PhDyT=&)9pz^?UPJD!9^u^2n7M2H0(;&%!ucaO zG#p#~72`LLF!73EstmTspe2~J>r4iWG5t7fA|4~=DzPpw`65$ZqSXpDYlN~+?Itef z5H|?p5+*3U1r%}aJzslft>9syDu=;+P9Bv%eB3p)d>UT^&SY6y0Y&C>M&HkCot`}N_t`2bKeVy zT{@8Oq%#QZJy!~xZ#n+Kf$v#7*q`Zs9xR8WtgW6J!+alXuGisQ?hS5ml8_52l@AajX`RTHDb7?V;_0|Ky6VT(VtcX%GbvNlu>}Ha={$}@sCI#CM@B6ejd6t|tEM~t zAaLY!#kT7S_f00LqlP;=O3-ywP}Nc9)eL5J%wfKOyE^V+TVUn%9t+GI%Z*D4)S@Hh zTOCQBx#~mgBZ(xNSNVfG^}8cMi5&uuPdJw7`5$MrHF`o*pf4Xel1e)1$<qBJCjUhC1SsNnvg>Exg;uz#XtWAQ;so;ya mlu|kSX@Yho6?_?2Qoy;%%GFfxRa{E}=O@9lsbC}G*Z2eRZXw6Se8UGy;GMmjn!jc3imu?^^Ngzq{*C`_MnGJ;czXhqPj-Xjs%>Ydh*iQvg7)*`DRr@@J01G4IoSC7*g&XnUU z&P5T&QyQMu@Rca)@k|t3@Kp`ZM)7Gpr#MEVIFIMm;{`Q+QG>1FC4sWtrfoWV1xmIx z91|#QPp70nWx}*&cYb70X8Vjmim5%j|R(C0lyuxKch_TSJJaXYiy@g?eQ zd8S^CA-s3XF6}EI?g6##xc`2xr#zL?`q_PVmC&-yjZjo+y}KT zu(AlgjoHhL)bO%Ev^Sm4CZ*CUux4=*G%HX7NI$U#a$aT$(OOK1KdlrE*tF!C_^xqEM5*1QxyINEWWSAue#gwTpDu!zwGHs3fh8HfkekaULAsa$0lzE*{HzP?_<(zRSYpyL$2p`!&C zG+fm2O?*pWtNSLAuG7L%Dp2ZY8DA=iljy~&aG}6L@`{dcA0*$-^c3$8<)sn|Fo-`qTvTReyI4gV3&2gsi1zOXuJOZ;-TZm3Ssj?qIOx9 z95SqjvP1b1R;2la7ueKgdvzx6AI~o;%__VN=W>o5VHcBGmb;qy!gH9tA&8x-W^uvA9~ z8!%V++1QG~51OjIuBXDzyq#2eX;@vhBeN%rr1bi2QEYr1f%wt_VS~5ciKW*ZvJEGn zWy#h9X9H!m!PJKe@s-K5X3n8w^pkE>n7RFCmhCc~Jtxp~r<1W?o-o+T*wDNN$E@q@ zN^}f#_w)^P_8jfrFR){&44FS!|0U1OZwtpZ*o!+t%;|1ZDX=P#4o@^D$tK@Hb+jAKg2KC~BA%pmRk`wzF-V5<4MxYDqk5JAH<^Er`D zpUP(hUJA!N!0?mAzwPDfea^PUCWR*QvMqeUn>!|p1=NOq7o5u{}uy7KK z0E;bQ3%D~M>R9TURnJ5z1WRozpZ9RK2g^AEDjQ>>G`4ISY^;+geV?RdxR=i;-@u=- zQk38`9O*tge@WcOnZW(n89=4Tsd(2k&6d7{71yvlRyF~x0>g zhB6T$Y&oh#1!{!u!Poi_0X)IjpxdZmwIjug`lwDC(_7*xgSQ)FFK-FdJ4LWA6qwxyKWKK_qEJZ^rukhF5v+@$aUq> zN|b(#4H_O2(dvKV5jw{d_MKxqma8}+)mU=xZ?QfxgAM&nlh}A@`vf*!MwG9+FQak> z@qTd)b(7dk{agBHP~X3O5?d$nsqS}CyQ_3v=>)a~Tn&nA3XMA$siuHN=FMZ&*~m!m z;SVq0?q*a__g|smZ>YlGu?hbm$G^z)Z*qM^A3nx@e1gM_<6}a2{_RB>*Gow6;PU~j zLMI+(zR?HL5Adzw33TBRYO6vY4kE$bK8)%>LPexjMPw5rqTx`*5e?lRA*P{+c!#;V m3}3+K`Hpe4gTD$thjL8dLuTwc;(@3FM;Wzac$DAA(ElH59H#RC literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler$ExitCommand.class b/Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler$ExitCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..d76c17af8c770c5a208b0e041c1081df6a4f0972 GIT binary patch literal 2754 zcmb7G+fx%)82=qWHmoaP1gr`+XlRL4E@Hh!tcs{e#8xa;Y-^XzF|2HMW3oZC7w?_U z*qM%f^R4gg1KJAI>r!V4fFLG9=oa(w5C+A3 zLc-f2yd$FyCuI!blo;NXFdV|^D!hj?GS*>4!k~n+43&FzQ@8gql()u)87g|MBxk5e z=q4Y`r$>4Alsakps-Y)Un=Ci9o=sd(C)5r@HB%i!c2+l2 z@z@CYs%BGUU`>f*qDGTE$H`kmzrqu0dNip<8Fsb?RO#k~HO@PR=D3m`TRaxvIWc;H zYc@GlX}CHVHV00Z(!j84$X2!S<7&pul!W&g>OBonlV6H*KB{TE`0i*I!~UZ9e1oxs zNS9?6Wi88d8OzMgr|%@s-g8 z1XaN(G)kI+B)Ed}NGTW-D;*j`Q;F2{O>!-73usEXpkQ3^N!%rpm;p^eTF|=wHy9O| zLU7Xp1p5txr&QxWHkD5ku=^%8p0RbyWZ2kmy10#arH(8>P!$X!JWE1G!9`>hV_rkXJB)OTyYD!}_HorrIn-X=0H^e8ELUTZm=se8}t}Jn_7*?ma-Ji}F9*_prGy%Jg zyj&3V?NI|6Q*&cpGo#MdPZyY9%&P|Vi~69;bJva9NwM+)UG%aIWbkm_)I{}Equ;c7 z_PnZbx49K%&(p&YDJ>9mxMew(Aw6ZPc0NmiDSoiNu?BzZsS5BF#pA~>656tK;RAh_ zK~^=5=W@}`&Q5}(sQJtEYpVU6U{~ihhPKw1lp7JPyKOntAL8d#>TA^9+-}EEc4B~G zYbgxP-<1EzkazK5nU{g#yoxz{@z}70PZWHLYYMiZyXfxw(DYskDuqgLu&wN6hHBNY z0|W^-2y+R`8qa4KJ`XzM>+lNcJ%72V#~EJ?cIJ#Evd{Fe5O^sztxX!@Pz)oo#E8liji7WFiWL;9VgPlO?U zbtGF=Tlo$8Xd#DJPD8ne-Lzg6u6Ea3Xv~$R@#$4=CZ-;v?o7CT z1`W?iad{x5p90Cai*|I-c_)3aM%me1mq(~q(4 zOnChRY?wjg6bT12{tH5Q5in9u+1lCYdJs$Jl}@e1_||O8*vj6TOy9 O?xE7gv6sFc?E4p-ZzQS! literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler$HistoryCommand.class b/Lab5Client/build/classes/java/main/client/commandline/CommandLineHandler$HistoryCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..9d6ab106483502e3b561376300619c85d309678e GIT binary patch literal 3638 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 P0}MTfek1=wUJ-{M%H2Gx literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/CommandRegistry$CommandAlreadyExistsException.class b/Lab5Client/build/classes/java/main/client/commandline/CommandRegistry$CommandAlreadyExistsException.class new file mode 100644 index 0000000000000000000000000000000000000000..3fa515062ef0fe66baf0c3ae4bf5e504445b66d9 GIT binary patch literal 1104 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 S0J_LNMxTsRg>kCzxzPef-xT& zF{ohNhbB2rDELCbRRRBH!_YFrDK(qbvI2FZT55hcJvXNsGXm|-Y$%n{)R_kt@9SAJ zd+~l!n>Y2eA#lLiA5WW?(m7+MY|A@5F*Y_dJ~Al~NZeKLsj-}?r($F3d|aS*QlB+c zGndf>&TroxC_biCV>UKvW^`jVo=B#2%`juhVpu8N&|(g8e2{4S26RI=2L;^W$PEF{ zaC(NgfduWwb92*L=DIqa;z}@)PO7OJYDSmO&Z5V>qf>WR6_RV(EOlodkSdU|=St(vJo{iLZTzhj1+&>D7-G0af-b~Ox1=XL04-CosLLChA!%Cj0J zL5(?M2d_X&cz0DKSB;v|RT2evZwvTlHM4};w--V+DfCy9NiCc0I@#AJ&=`(vKPN1P zcYp_@Sb5)MI+sammvmX@W`}jNZYSjN^P>&zeuVJ8AJ;Ic;JP1Qf*LMVK3$stT@GNS zHdwM2tqtpUYsp%-maV1Gv23WYV7;{Rp~Az$LgBHM=lIBa!Nq*xQE$k4Rd{HF_Z}Z52hctaNCcsaa-U}W%WFHTbI|Un!UsJ6gW}Yp>$@pU8G0f z?I6%#Gub!a#PnS)Y4Tcnw_jI3JAth>RBXlO%|PGg8_FzYU z7rEn+TLNQybnWg|uhPb)Z1me#p?f|@QD@3g9kw#mP5#|Wyy`RBT>2h+yn7D}=Y}Xt zATJ3wQ-glKA6xl4WvS&g!0`y5Ta5aYzKGV~#Tk6!fVA0GfQKN`SCsksc^=P}PU9)!%DNUQ?Y~t}4V?f0 literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/LongStrings.class b/Lab5Client/build/classes/java/main/client/commandline/LongStrings.class new file mode 100644 index 0000000000000000000000000000000000000000..06e1b71f38fb7a3fbfa253953be93a801377a363 GIT binary patch literal 1819 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 Uy}l-=rAKTU7fF#$8gVZD1UjUGy8r+H literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/pdcommands/ClearCommand.class b/Lab5Client/build/classes/java/main/client/commandline/pdcommands/ClearCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..09532d8e5733051d0126da1585ab4682c02af928 GIT binary patch literal 867 zcma)4O>fgc5Ph3CwPV~gq!7M~Lklwy_PLT>9+PU-dFk!)eeNnA^xSqF z$)MM)?@%2)>XGv5U#=OQ#C{B>IDB41SJfPgDuzV%=8Tl{JzM}AH zlDSN_0*$OrY=am&R>&(6VoiAzmnovXpv<{uj<8Zg`+=nwdDcFJu6-mVhfL9=6XaQ> XlPOgvacQPRJR15b(qcG0;Z%PE)Gz0g literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/pdcommands/FilterContainsNameCommand.class b/Lab5Client/build/classes/java/main/client/commandline/pdcommands/FilterContainsNameCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..9cadfb9f511f7829cdf023217649931c2648c036 GIT binary patch literal 1287 zcmbVMTTc@~6#j-5wk-?Pa`CPUf|iR^K_!YYAr%ZsDZ~;I@S&M5D=uz#v0aG9m~e^V zfvCU02Yu$D5()&QzWX%$hm2?2DiRPAn{+aB=6sjTIcLBB*ew9Kg+3q7`*6XJi?|e^ z<#GTr6hE5L;=`2yTG1xqsvp(3CLt`LouTT!ZtC^}22Z$sg25ZLrZtATm~LwE`E*Ll zjPsO1kx*$tIgNTG1GH#-W zp-p@w;Z5Rq{pE^EtHf1Mev^`{gkG6?<~Bp{;MGS{vzltlXu=(azW*#ML+{DRG0mDY zw1?d0DW3h+3{)+*V=VJf8x6kH)OpG?H0pqcq2bv0;NxU;G(J8s98V6+y1`*~__-H#$9S!}1$DOJ_9yswTYins5H!YK4Xe`m`R%DF2-KL(` zc$%c^ixoK>W{~FGB*P@!G1gq6LnBhEWj{@SHGKx$Uj^tTP)lnaorX|JJ0RE*VxCaN z20UBvZlm%`F*8VO2wqwx_~9c4iBNu=qKI6=(S1Fgs4i$MbG|?osQ|5=1@C9nY@jM6 zZNcYR@2K2|f6~Jelip5GPa=>yTlFlqqqE#OT84 zU*ZBAkXmWkyLuDle~HNzH@$a^X{GRKigdZcaclrOaf<Zo9Ra{4&ds^%}wBe>oONEqaZ5#VXoiUFkpI(;|XrS^IV)uN~eXa(>3)ip^CK19TQQae#K zO%`AVThnT1Ioj*B5-H0_KD@KIo3nz z%d%Xz`mGe03_I+(N80}Al~rj_=UD8YHaA~f5HL%Fg&c~Jn&lr_1+uyPU=ux$bH|5g z`FQFdoN(%o%vtXeXOQJ@lH{KR#K57$39bgCB8IpF(o-1`&%~ODe}T4#q0f=VR}-Jw|Hl}=(=A+=keH^Y=ez&DTYvxkUI8$UOcc#H5kVA#5u`9A$aDn5 zIN5}eC{96*;xx`QVN}MLjB$p>Ny9SSD-3s1*{9l~rka|ypypi1uofof_Oi0NT`1U= zDn6Q(Hw}xcx1Mvo>}vBSpBS2DkTQ0jGqh$&HdQXnbLWAOF(k6Ku9>r%V+gv&l-wsq ziQ#NkHw|vNI~*7DwJ;@hhTBDx-_$6KR^pjz^a+Lr%``N!Pwa)t5Uu*0w#*j{Y>uHh z&r7;v6kWr%NX$2ZGaTI~GfJqc&Zn(R0F_}RHB`^a;iaN&mAG1id7qccrb}Sk771-$ zbNStTO~lZZdbAh%5Mh-xXMqxHuOns%8F_~IHp8q<{bFdzxtjj$o>mO1E8{F>nX}7| z&Tku{1qbTZ@s#Mi0tGD!j^Lb(^9nBDqJjfBDC3fX2~08!cptoP-dC^UzxJ2B6?!ZF zTW`awB#F5~mks}&|3=1T1y^uY#x(`kaf4y>rICLnbSmBtZGL z&KOaT(LfInO%ER$>6O;NJ`)u}tKiXBoDs5&(`~$}i8dsN5|VawkRNgDL|09_n|R@X z*MnY2B&VUQMVkzw1F`g1gu-7C&ZXBNt&sNih%t)T8bnkA@3C6M2oB+J&C@bj2y}z# ziu4gJU(k?fT!kF|ln#%sqbWQ5tICW7Oz9J;hJ&Q~(M0!lG!o1h!H%Pwo*shOi(>?J mfP#o*tLY5VdL1RIn|Mj|QSg4EA_&F*phG4Dsy{J882AS+mzhlf literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/pdcommands/PeopleDatabaseCommands.class b/Lab5Client/build/classes/java/main/client/commandline/pdcommands/PeopleDatabaseCommands.class new file mode 100644 index 0000000000000000000000000000000000000000..d585f65cd6eb82fd29285a496e0c963f50143686 GIT binary patch literal 9049 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 literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.class b/Lab5Client/build/classes/java/main/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..6e87b7ffbb68a5f6cbda4e9ad75c9f71483bfcdf GIT binary patch literal 1091 zcmbtTO-~b16g{skOk0P7Me8>VeijyXp(`;aq#vZoq!8PXh>PZR=2?eKXGl8`m!dH) zj3M!NxPZnA0l~eiH-E@@r>!;wLrvV=ckg}ooO|=`c|U$090PcWbQG7OxE#Y3T#b{t z7Do)%72Jp+iYW!t3N(h%$ChJxPZ+}K*%gLJ)-?sgxNbS3w9%-EW`);m$|QBy;Pwh{ zT0z`TM!c6+iy^BUwj~@dW4Mh5cTAhWnRT-twKB_1%kc`9u+5xk8Nx9wrykIGmg{7D zka>paCbunjojDdo;;E}{(IS>bKl?A z256St>8X&f){+;H3l!sLJEvO~%v24>_7vR74x8)akAUm4>R_=B??DPl~%&54D zTPkkjj*2+$GE5BKY^k;;3{S-*?lCO<_j(u}4B-&&x-D|t<2BwA{iQNY1sZUj6T-;9 z62=DA*@8AXz5KLTs#FWbyq>G(^5ty4lq;4NtNK!Qp;BBbF=+bP9HgAFy6^_93^VE3 zvq6MeOrKWR>gm)Fp5V)z5M%G%=P^TnEJoiD2!WJ|b7WPD3K$^|n3zkla5B_J_$wlN z7}@Psj*(3wLRKMkln@HW$xBd1?cpe%porl-RSq~qluOJ-jxhQx%*q`okqB$8dr}v-yJXoCiSY#! zpY#X#A9(PFG${D))AkP;XJM5R2*zx7&dhgazL|4o&d*=_hX5uq8AERj*W&2I^#lnu zfhP0^VjzJV7?g1{js$MWxGf{a(0JdpP45ANluEBML}wgBFtlb&TP#(|Md3c?MT?MR z#?iU8%3U+CLon(+GdCEup4J+=1Q|Kfk}zxmbLcI~ZN zdq?W7|DFDW+P3Of{XNy+_YVmT@cr5wf~uKY#oMgA=G51wGA z+y9K(-}z(c32Ux+rlmb0F<-HD&va}$U&5j>TXvT!mc=l5P8sRCGQyEOHH*h>n?gT5 zv?h9$Km>GcXeQZ0);tFB1$rbIDHDOt;Ezuh;kf< zcJct}9q0@>w}?|BY+$&G#`owQmd2})7l#@S5X(s{n~RQQcM*^7NIT>u5hKt=F`$ZM svRa70k9bw$3^J+Y(?VG;kynK5fiP#Fb>lK+?IBbGQ%Su-Y6Mq*19_Q5A^-pY literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/pdcommands/SaveCommand.class b/Lab5Client/build/classes/java/main/client/commandline/pdcommands/SaveCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..4eedb7474fe8307aa39ac12fb7f9356b43e4ef2a GIT binary patch literal 875 zcma)4O>fgc5Ph4twPV~gq!7M~Lkl=X!Us4Yf{;*YxmbW?6p3=$IIG~wu`9=kI06Dr zh+o11DwU5^%@5$T{zHgy5)`VUfGo|5J`ZPyWAP_+FRy>Y%Ib%2LuMP_ggbi847I6t{Hxihq5b=X!OIKaMzSQ z$~}z8Uie-fjLpL>fpc4Aew8MYBO@2~!jS znT0HiXJZ}2zd-wnsn1d749!_+H0z{JkV3~SMQLJ;p^k8d5W{K89DBxyOD|}BOuvq^ kN*B8JiI^CaV~SQ#WRQYuW6o%gmv;#O$q)Pp)gP+ia7h@*R}^Rrvk!Gsw;wTh6Uhw*-?CK^40Ac%6wg}ql4z{+l0lhh&MI?bgEw?n zkCQ&TrZ*Yx=E{aHOgmM!>UC~b3^J#7Dr4156B!Eq<~#L$dBY8r7G{Q&(PfCn@| zI7LwLJx9bxu`mlZlte4i=fflCb13fif}aY?bE4v$IXqY*emEQYf~PwWpe4l8;9 literal 0 HcmV?d00001 diff --git a/Lab5Client/build/classes/java/main/client/commandline/pdcommands/UpdateCommand.class b/Lab5Client/build/classes/java/main/client/commandline/pdcommands/UpdateCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..b57e9944fb3bc36be77f5cc228568f18118d5e22 GIT binary patch literal 1302 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 VaVK+x literal 0 HcmV?d00001 diff --git a/Lab5Client/build/docs/javadoc/allclasses-frame.html b/Lab5Client/build/docs/javadoc/allclasses-frame.html new file mode 100644 index 0000000..493897a --- /dev/null +++ b/Lab5Client/build/docs/javadoc/allclasses-frame.html @@ -0,0 +1,44 @@ + + + + + +All Classes (Lab5Client 2.0 API) + + + + +

All Classes

+ + + diff --git a/Lab5Client/build/docs/javadoc/allclasses-noframe.html b/Lab5Client/build/docs/javadoc/allclasses-noframe.html new file mode 100644 index 0000000..f4512ab --- /dev/null +++ b/Lab5Client/build/docs/javadoc/allclasses-noframe.html @@ -0,0 +1,44 @@ + + + + + +All Classes (Lab5Client 2.0 API) + + + + +

All Classes

+ + + diff --git a/Lab5Client/build/docs/javadoc/client/Lab5Client.html b/Lab5Client/build/docs/javadoc/client/Lab5Client.html new file mode 100644 index 0000000..393446a --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/Lab5Client.html @@ -0,0 +1,268 @@ + + + + + +Lab5Client (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client
+

Class Lab5Client

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • client.Lab5Client
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Lab5Client
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Lab5Client() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static voidmain(java.lang.String[] args) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Lab5Client

        +
        public Lab5Client()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main(java.lang.String[] args)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/Command.html b/Lab5Client/build/docs/javadoc/client/commandline/Command.html new file mode 100644 index 0000000..9aa6b54 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/Command.html @@ -0,0 +1,388 @@ + + + + + +Command (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class Command

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • client.commandline.Command
    • +
    +
  • +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      protected java.lang.Stringalias 
      protected java.lang.Object[]args 
      protected booleanclientOnly 
      protected java.lang.Stringdescription 
      protected common.commandline.Executableexecutable 
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Command(java.lang.String alias, + boolean clientOnly, + java.lang.String description, + common.commandline.Executable executable) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethod and Description
      common.commandline.response.CommandResultexecuteOnClient() 
      abstract booleanvalidate(java.lang.String[] args) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        alias

        +
        protected final java.lang.String alias
        +
      • +
      + + + +
        +
      • +

        description

        +
        protected final java.lang.String description
        +
      • +
      + + + +
        +
      • +

        clientOnly

        +
        protected final boolean clientOnly
        +
      • +
      + + + +
        +
      • +

        executable

        +
        protected final common.commandline.Executable executable
        +
      • +
      + + + +
        +
      • +

        args

        +
        protected java.lang.Object[] args
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Command

        +
        public Command(java.lang.String alias,
        +               boolean clientOnly,
        +               java.lang.String description,
        +               common.commandline.Executable executable)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public abstract boolean validate(java.lang.String[] args)
        +
      • +
      + + + +
        +
      • +

        executeOnClient

        +
        public common.commandline.response.CommandResult executeOnClient()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ExecuteScriptCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ExecuteScriptCommand.html new file mode 100644 index 0000000..1a97727 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ExecuteScriptCommand.html @@ -0,0 +1,311 @@ + + + + + +CommandLineHandler.ExecuteScriptCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandLineHandler.ExecuteScriptCommand

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing class:
    +
    CommandLineHandler
    +
    +
    +
    +
    public static class CommandLineHandler.ExecuteScriptCommand
    +extends Command
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ExecuteScriptCommand

        +
        public ExecuteScriptCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ExitCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ExitCommand.html new file mode 100644 index 0000000..3fec705 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ExitCommand.html @@ -0,0 +1,311 @@ + + + + + +CommandLineHandler.ExitCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandLineHandler.ExitCommand

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing class:
    +
    CommandLineHandler
    +
    +
    +
    +
    public static class CommandLineHandler.ExitCommand
    +extends Command
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ExitCommand

        +
        public ExitCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.HistoryCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.HistoryCommand.html new file mode 100644 index 0000000..1add7c0 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.HistoryCommand.html @@ -0,0 +1,311 @@ + + + + + +CommandLineHandler.HistoryCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandLineHandler.HistoryCommand

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing class:
    +
    CommandLineHandler
    +
    +
    +
    +
    public static class CommandLineHandler.HistoryCommand
    +extends Command
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HistoryCommand

        +
        public HistoryCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ModeCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ModeCommand.html new file mode 100644 index 0000000..ae3bc1e --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.ModeCommand.html @@ -0,0 +1,311 @@ + + + + + +CommandLineHandler.ModeCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandLineHandler.ModeCommand

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing class:
    +
    CommandLineHandler
    +
    +
    +
    +
    public static class CommandLineHandler.ModeCommand
    +extends Command
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ModeCommand

        +
        public ModeCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.html new file mode 100644 index 0000000..593e4df --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandLineHandler.html @@ -0,0 +1,431 @@ + + + + + +CommandLineHandler (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandLineHandler

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • client.commandline.CommandLineHandler
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class CommandLineHandler
    +extends java.lang.Object
    +
    Класс обработчика командной строки, реализует шаблон проектирования Singleton, + читает ввод с командной строки, обрабатывает его и вызывает соответствующую команду + на выполнение из регистра команд, используйте метод start() для его запуска
    +
    +
    See Also:
    +
    CommandRegistry
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      voidaddNewInput(java.io.Reader reader, + java.lang.String filePath) 
      java.lang.StringawaitInput(java.lang.String msg, + java.lang.String err) +
      Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если при вводе данных произошла ошибка
      +
      java.lang.StringawaitInput(java.lang.String msg, + java.lang.String err, + java.util.function.Predicate<java.lang.String> predicate) +
      Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если введенные данные не соответствуют предикату predicate
      +
      <T> TawaitInput(java.lang.String msg, + java.lang.String err, + java.util.function.Predicate<java.lang.String> predicate, + java.util.function.Function<java.lang.String,T> transform) +
      Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если введенные данные не соответствуют предикату predicate, + преобразует результат в тип T в соответствии с функцией transform
      +
      common.commandline.response.CommandResultexecuteOnServer(UDPClient udp, + Command command) 
      static CommandLineHandlergetInstance() 
      voidremoveInput() 
      voidstart() +
      Метод, запускающий обработчик командной строки, для остановки требуется ввести команду "exit"
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        start

        +
        public void start()
        +
        Метод, запускающий обработчик командной строки, для остановки требуется ввести команду "exit"
        +
      • +
      + + + +
        +
      • +

        executeOnServer

        +
        public common.commandline.response.CommandResult executeOnServer(UDPClient udp,
        +                                                                 Command command)
        +
      • +
      + + + +
        +
      • +

        awaitInput

        +
        public java.lang.String awaitInput(java.lang.String msg,
        +                                   java.lang.String err)
        +
        Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если при вводе данных произошла ошибка
        +
        +
        Parameters:
        +
        msg - Строка, печатающаяся как запрос данных от пользователя
        +
        err - Строка, печатающаяся во время ошибки
        +
        Returns:
        +
        Строка из потока ввода
        +
        +
      • +
      + + + +
        +
      • +

        awaitInput

        +
        public java.lang.String awaitInput(java.lang.String msg,
        +                                   java.lang.String err,
        +                                   java.util.function.Predicate<java.lang.String> predicate)
        +
        Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если введенные данные не соответствуют предикату predicate
        +
        +
        Parameters:
        +
        msg - Строка, печатающаяся как запрос данных от пользователя
        +
        err - Строка, печатающаяся при несоответствии ввода предикату
        +
        predicate - Предикат, определяющий валидность введенных данных
        +
        Returns:
        +
        Строка из потока ввода
        +
        +
      • +
      + + + +
        +
      • +

        awaitInput

        +
        public <T> T awaitInput(java.lang.String msg,
        +                        java.lang.String err,
        +                        java.util.function.Predicate<java.lang.String> predicate,
        +                        java.util.function.Function<java.lang.String,T> transform)
        +
        Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если введенные данные не соответствуют предикату predicate, + преобразует результат в тип T в соответствии с функцией transform
        +
        +
        Type Parameters:
        +
        T - Тип, к которому будет приведен результат
        +
        Parameters:
        +
        msg - Строка, печатающаяся как запрос данных от пользователя
        +
        err - Строка, печатающаяся при несоответствии ввода предикату
        +
        predicate - Предикат, определяющий валидность введенных данных
        +
        transform - Функция, преобразующая результат в тип T
        +
        Returns:
        +
        Результат типа T
        +
        +
      • +
      + + + +
        +
      • +

        addNewInput

        +
        public void addNewInput(java.io.Reader reader,
        +                        java.lang.String filePath)
        +
      • +
      + + + +
        +
      • +

        removeInput

        +
        public void removeInput()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.CommandAlreadyExistsException.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.CommandAlreadyExistsException.html new file mode 100644 index 0000000..75030e8 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.CommandAlreadyExistsException.html @@ -0,0 +1,228 @@ + + + + + +CommandRegistry.CommandAlreadyExistsException (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandRegistry.CommandAlreadyExistsException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • java.lang.RuntimeException
        • +
        • +
            +
          • client.commandline.CommandRegistry.CommandAlreadyExistsException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing class:
    +
    CommandRegistry
    +
    +
    +
    +
    public static class CommandRegistry.CommandAlreadyExistsException
    +extends java.lang.RuntimeException
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Summary

      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.CommandNotFoundException.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.CommandNotFoundException.html new file mode 100644 index 0000000..31887eb --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.CommandNotFoundException.html @@ -0,0 +1,228 @@ + + + + + +CommandRegistry.CommandNotFoundException (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandRegistry.CommandNotFoundException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • java.lang.RuntimeException
        • +
        • +
            +
          • client.commandline.CommandRegistry.CommandNotFoundException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing class:
    +
    CommandRegistry
    +
    +
    +
    +
    public static class CommandRegistry.CommandNotFoundException
    +extends java.lang.RuntimeException
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Summary

      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.HelpCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.HelpCommand.html new file mode 100644 index 0000000..6322a2a --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.HelpCommand.html @@ -0,0 +1,311 @@ + + + + + +CommandRegistry.HelpCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandRegistry.HelpCommand

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing class:
    +
    CommandRegistry
    +
    +
    +
    +
    public static class CommandRegistry.HelpCommand
    +extends Command
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HelpCommand

        +
        public HelpCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.html b/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.html new file mode 100644 index 0000000..11e3c59 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/CommandRegistry.html @@ -0,0 +1,314 @@ + + + + + +CommandRegistry (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Class CommandRegistry

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • client.commandline.CommandRegistry
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class CommandRegistry
    +extends java.lang.Object
    +
    Класс регистра команд, используемый для добавления, переопределения или удаления команд
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        registerCommand

        +
        public static void registerCommand(Command command)
        +
      • +
      + + + +
        +
      • +

        registerCommands

        +
        public static void registerCommands(Command... commands)
        +
      • +
      + + + +
        +
      • +

        reassignCommand

        +
        public static void reassignCommand(Command command)
        +
      • +
      + + + +
        +
      • +

        unregisterCommand

        +
        public static void unregisterCommand(java.lang.String alias)
        +
      • +
      + + + +
        +
      • +

        getCommand

        +
        public static Command getCommand(java.lang.String alias)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/LongStrings.html b/Lab5Client/build/docs/javadoc/client/commandline/LongStrings.html new file mode 100644 index 0000000..cb28d80 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/LongStrings.html @@ -0,0 +1,351 @@ + + + + + +LongStrings (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline
+

Enum LongStrings

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Enum<LongStrings>
    • +
    • +
        +
      • client.commandline.LongStrings
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<LongStrings>
    +
    +
    +
    +
    public enum LongStrings
    +extends java.lang.Enum<LongStrings>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + +
      Enum Constants 
      Enum Constant and Description
      GREETINGS 
      LINE 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.StringgetValue() 
      static LongStringsvalueOf(java.lang.String name) +
      Returns the enum constant of this type with the specified name.
      +
      static LongStrings[]values() +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Enum

        +clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +getClass, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static LongStrings[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (LongStrings c : LongStrings.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static LongStrings valueOf(java.lang.String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
        +
        java.lang.NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getValue

        +
        public java.lang.String getValue()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/package-frame.html b/Lab5Client/build/docs/javadoc/client/commandline/package-frame.html new file mode 100644 index 0000000..f977d5f --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/package-frame.html @@ -0,0 +1,35 @@ + + + + + +client.commandline (Lab5Client 2.0 API) + + + + +

client.commandline

+ + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/package-summary.html b/Lab5Client/build/docs/javadoc/client/commandline/package-summary.html new file mode 100644 index 0000000..ebc63df --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/package-summary.html @@ -0,0 +1,207 @@ + + + + + +client.commandline (Lab5Client 2.0 API) + + + + + + + + + + +
+

Package client.commandline

+
+
+ +
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/package-tree.html b/Lab5Client/build/docs/javadoc/client/commandline/package-tree.html new file mode 100644 index 0000000..db1a74c --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/package-tree.html @@ -0,0 +1,170 @@ + + + + + +client.commandline Class Hierarchy (Lab5Client 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package client.commandline

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Enum Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
    • +
    +
  • +
+
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddCommand.html new file mode 100644 index 0000000..0679d74 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddCommand.html @@ -0,0 +1,312 @@ + + + + + +AddCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class AddCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AddCommand

        +
        public AddCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddIfMaxCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddIfMaxCommand.html new file mode 100644 index 0000000..84f3970 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddIfMaxCommand.html @@ -0,0 +1,312 @@ + + + + + +AddIfMaxCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class AddIfMaxCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AddIfMaxCommand

        +
        public AddIfMaxCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddIfMinCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddIfMinCommand.html new file mode 100644 index 0000000..284a50e --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/AddIfMinCommand.html @@ -0,0 +1,312 @@ + + + + + +AddIfMinCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class AddIfMinCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AddIfMinCommand

        +
        public AddIfMinCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/ClearCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/ClearCommand.html new file mode 100644 index 0000000..4eab2f1 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/ClearCommand.html @@ -0,0 +1,312 @@ + + + + + +ClearCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class ClearCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ClearCommand

        +
        public ClearCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/FilterContainsNameCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/FilterContainsNameCommand.html new file mode 100644 index 0000000..1bbccb7 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/FilterContainsNameCommand.html @@ -0,0 +1,312 @@ + + + + + +FilterContainsNameCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class FilterContainsNameCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FilterContainsNameCommand

        +
        public FilterContainsNameCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/InfoCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/InfoCommand.html new file mode 100644 index 0000000..05c9d78 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/InfoCommand.html @@ -0,0 +1,312 @@ + + + + + +InfoCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class InfoCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        InfoCommand

        +
        public InfoCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PeopleDatabaseCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PeopleDatabaseCommand.html new file mode 100644 index 0000000..6783e09 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PeopleDatabaseCommand.html @@ -0,0 +1,330 @@ + + + + + +PeopleDatabaseCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class PeopleDatabaseCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        PeopleDatabaseCommand

        +
        public PeopleDatabaseCommand(java.lang.String alias,
        +                             boolean clientOnly,
        +                             java.lang.String description,
        +                             common.commandline.Executable executable)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        executeOnClient

        +
        public common.commandline.response.CommandResult executeOnClient()
        +
        +
        Overrides:
        +
        executeOnClient in class Command
        +
        +
      • +
      + + + +
        +
      • +

        validateIdCommand

        +
        public static boolean validateIdCommand(java.lang.String[] args)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PeopleDatabaseCommands.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PeopleDatabaseCommands.html new file mode 100644 index 0000000..102f392 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PeopleDatabaseCommands.html @@ -0,0 +1,319 @@ + + + + + +PeopleDatabaseCommands (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class PeopleDatabaseCommands

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • client.commandline.pdcommands.PeopleDatabaseCommands
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class PeopleDatabaseCommands
    +extends java.lang.Object
    +
    Класс объявления всех команд, связанных с манипуляциями над объектом класса PeopleDatabase
    +
    +
    See Also:
    +
    PeopleDatabase
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static common.collection.PeopleDatabasepeopleDatabase 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static common.data.CoordinatescreateCoordinates() 
      static common.data.LocationcreateLocation() 
      static common.data.PersoncreatePerson() 
      static voidregisterDatabaseCommands() +
      Метод добавления всех команд в регистр команд, обязательно вызывайте его в своей программе, + если вам требуются данные команды
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        peopleDatabase

        +
        public static common.collection.PeopleDatabase peopleDatabase
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        registerDatabaseCommands

        +
        public static void registerDatabaseCommands()
        +
        Метод добавления всех команд в регистр команд, обязательно вызывайте его в своей программе, + если вам требуются данные команды
        +
      • +
      + + + +
        +
      • +

        createPerson

        +
        public static common.data.Person createPerson()
        +
      • +
      + + + +
        +
      • +

        createLocation

        +
        public static common.data.Location createLocation()
        +
      • +
      + + + +
        +
      • +

        createCoordinates

        +
        public static common.data.Coordinates createCoordinates()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.html new file mode 100644 index 0000000..8a4f121 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.html @@ -0,0 +1,312 @@ + + + + + +PrintFieldDescendingLocationCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class PrintFieldDescendingLocationCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        PrintFieldDescendingLocationCommand

        +
        public PrintFieldDescendingLocationCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/RemoveByIdCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/RemoveByIdCommand.html new file mode 100644 index 0000000..ab50ad1 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/RemoveByIdCommand.html @@ -0,0 +1,312 @@ + + + + + +RemoveByIdCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class RemoveByIdCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        RemoveByIdCommand

        +
        public RemoveByIdCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/SaveCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/SaveCommand.html new file mode 100644 index 0000000..4e266bc --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/SaveCommand.html @@ -0,0 +1,312 @@ + + + + + +SaveCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class SaveCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SaveCommand

        +
        public SaveCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/ShowCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/ShowCommand.html new file mode 100644 index 0000000..5bda0a4 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/ShowCommand.html @@ -0,0 +1,312 @@ + + + + + +ShowCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class ShowCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ShowCommand

        +
        public ShowCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/SumOfHeightCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/SumOfHeightCommand.html new file mode 100644 index 0000000..22d7d5f --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/SumOfHeightCommand.html @@ -0,0 +1,312 @@ + + + + + +SumOfHeightCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class SumOfHeightCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SumOfHeightCommand

        +
        public SumOfHeightCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/UpdateCommand.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/UpdateCommand.html new file mode 100644 index 0000000..b9c6080 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/UpdateCommand.html @@ -0,0 +1,312 @@ + + + + + +UpdateCommand (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.commandline.pdcommands
+

Class UpdateCommand

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UpdateCommand

        +
        public UpdateCommand()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        validate

        +
        public boolean validate(java.lang.String[] args)
        +
        +
        Specified by:
        +
        validate in class Command
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-frame.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-frame.html new file mode 100644 index 0000000..6495b51 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-frame.html @@ -0,0 +1,32 @@ + + + + + +client.commandline.pdcommands (Lab5Client 2.0 API) + + + + +

client.commandline.pdcommands

+ + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-summary.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-summary.html new file mode 100644 index 0000000..2a9d2bf --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-summary.html @@ -0,0 +1,193 @@ + + + + + +client.commandline.pdcommands (Lab5Client 2.0 API) + + + + + + + + + + +
+

Package client.commandline.pdcommands

+
+
+ +
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-tree.html b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-tree.html new file mode 100644 index 0000000..789e15b --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/commandline/pdcommands/package-tree.html @@ -0,0 +1,154 @@ + + + + + +client.commandline.pdcommands Class Hierarchy (Lab5Client 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package client.commandline.pdcommands

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/net/UDPClient.html b/Lab5Client/build/docs/javadoc/client/net/UDPClient.html new file mode 100644 index 0000000..1fc25fe --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/net/UDPClient.html @@ -0,0 +1,323 @@ + + + + + +UDPClient (Lab5Client 2.0 API) + + + + + + + + + + + +
+
client.net
+

Class UDPClient

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • client.net.UDPClient
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class UDPClient
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      UDPClient(int port) 
      UDPClient(java.lang.String hostname, + int port) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      voidconnect() 
      voiddisconnect() 
      common.commandline.response.CommandResultreceive() 
      common.commandline.response.CommandResultsend(common.commandline.Executable executable, + java.lang.Object[] args) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UDPClient

        +
        public UDPClient(int port)
        +
      • +
      + + + +
        +
      • +

        UDPClient

        +
        public UDPClient(java.lang.String hostname,
        +                 int port)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        connect

        +
        public void connect()
        +
      • +
      + + + +
        +
      • +

        disconnect

        +
        public void disconnect()
        +
      • +
      + + + +
        +
      • +

        send

        +
        public common.commandline.response.CommandResult send(common.commandline.Executable executable,
        +                                                      java.lang.Object[] args)
        +
      • +
      + + + +
        +
      • +

        receive

        +
        public common.commandline.response.CommandResult receive()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/net/package-frame.html b/Lab5Client/build/docs/javadoc/client/net/package-frame.html new file mode 100644 index 0000000..c388a1b --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/net/package-frame.html @@ -0,0 +1,19 @@ + + + + + +client.net (Lab5Client 2.0 API) + + + + +

client.net

+
+

Classes

+ +
+ + diff --git a/Lab5Client/build/docs/javadoc/client/net/package-summary.html b/Lab5Client/build/docs/javadoc/client/net/package-summary.html new file mode 100644 index 0000000..d88c824 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/net/package-summary.html @@ -0,0 +1,139 @@ + + + + + +client.net (Lab5Client 2.0 API) + + + + + + + + + + +
+

Package client.net

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    UDPClient 
    +
  • +
+
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/net/package-tree.html b/Lab5Client/build/docs/javadoc/client/net/package-tree.html new file mode 100644 index 0000000..ac95358 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/net/package-tree.html @@ -0,0 +1,134 @@ + + + + + +client.net Class Hierarchy (Lab5Client 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package client.net

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object + +
  • +
+
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/package-frame.html b/Lab5Client/build/docs/javadoc/client/package-frame.html new file mode 100644 index 0000000..1e282b5 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/package-frame.html @@ -0,0 +1,19 @@ + + + + + +client (Lab5Client 2.0 API) + + + + +

client

+
+

Classes

+ +
+ + diff --git a/Lab5Client/build/docs/javadoc/client/package-summary.html b/Lab5Client/build/docs/javadoc/client/package-summary.html new file mode 100644 index 0000000..2122eb6 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/package-summary.html @@ -0,0 +1,139 @@ + + + + + +client (Lab5Client 2.0 API) + + + + + + + + + + +
+

Package client

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    Lab5Client 
    +
  • +
+
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/client/package-tree.html b/Lab5Client/build/docs/javadoc/client/package-tree.html new file mode 100644 index 0000000..5ccbe49 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/client/package-tree.html @@ -0,0 +1,134 @@ + + + + + +client Class Hierarchy (Lab5Client 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package client

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/constant-values.html b/Lab5Client/build/docs/javadoc/constant-values.html new file mode 100644 index 0000000..fc0d8c4 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/constant-values.html @@ -0,0 +1,121 @@ + + + + + +Constant Field Values (Lab5Client 2.0 API) + + + + + + + + + + +
+

Constant Field Values

+

Contents

+
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/deprecated-list.html b/Lab5Client/build/docs/javadoc/deprecated-list.html new file mode 100644 index 0000000..600fef5 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/deprecated-list.html @@ -0,0 +1,121 @@ + + + + + +Deprecated List (Lab5Client 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Client/build/docs/javadoc/help-doc.html b/Lab5Client/build/docs/javadoc/help-doc.html new file mode 100644 index 0000000..ce285e5 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/help-doc.html @@ -0,0 +1,222 @@ + + + + + +API Help (Lab5Client 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
  • +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Client/build/docs/javadoc/index-all.html b/Lab5Client/build/docs/javadoc/index-all.html new file mode 100644 index 0000000..e5800dc --- /dev/null +++ b/Lab5Client/build/docs/javadoc/index-all.html @@ -0,0 +1,449 @@ + + + + + +Index (Lab5Client 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
A C D E F G H I L M P R S U V  + + +

A

+
+
AddCommand - Class in client.commandline.pdcommands
+
 
+
AddCommand() - Constructor for class client.commandline.pdcommands.AddCommand
+
 
+
AddIfMaxCommand - Class in client.commandline.pdcommands
+
 
+
AddIfMaxCommand() - Constructor for class client.commandline.pdcommands.AddIfMaxCommand
+
 
+
AddIfMinCommand - Class in client.commandline.pdcommands
+
 
+
AddIfMinCommand() - Constructor for class client.commandline.pdcommands.AddIfMinCommand
+
 
+
addNewInput(Reader, String) - Method in class client.commandline.CommandLineHandler
+
 
+
alias - Variable in class client.commandline.Command
+
 
+
args - Variable in class client.commandline.Command
+
 
+
awaitInput(String, String) - Method in class client.commandline.CommandLineHandler
+
+
Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если при вводе данных произошла ошибка
+
+
awaitInput(String, String, Predicate<String>) - Method in class client.commandline.CommandLineHandler
+
+
Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если введенные данные не соответствуют предикату predicate
+
+
awaitInput(String, String, Predicate<String>, Function<String, T>) - Method in class client.commandline.CommandLineHandler
+
+
Метод, ожидающий ввода из потока ввода reader и возвращающий результат, + печатает запрос msg перед ожиданием данных (если их вводит пользователь), + печатает ошибку err, если введенные данные не соответствуют предикату predicate, + преобразует результат в тип T в соответствии с функцией transform
+
+
+ + + +

C

+
+
ClearCommand - Class in client.commandline.pdcommands
+
 
+
ClearCommand() - Constructor for class client.commandline.pdcommands.ClearCommand
+
 
+
client - package client
+
 
+
client.commandline - package client.commandline
+
 
+
client.commandline.pdcommands - package client.commandline.pdcommands
+
 
+
client.net - package client.net
+
 
+
clientOnly - Variable in class client.commandline.Command
+
 
+
Command - Class in client.commandline
+
 
+
Command(String, boolean, String, Executable) - Constructor for class client.commandline.Command
+
 
+
CommandLineHandler - Class in client.commandline
+
+
Класс обработчика командной строки, реализует шаблон проектирования Singleton, + читает ввод с командной строки, обрабатывает его и вызывает соответствующую команду + на выполнение из регистра команд, используйте метод CommandLineHandler.start() для его запуска
+
+
CommandLineHandler.ExecuteScriptCommand - Class in client.commandline
+
 
+
CommandLineHandler.ExitCommand - Class in client.commandline
+
 
+
CommandLineHandler.HistoryCommand - Class in client.commandline
+
 
+
CommandLineHandler.ModeCommand - Class in client.commandline
+
 
+
CommandRegistry - Class in client.commandline
+
+
Класс регистра команд, используемый для добавления, переопределения или удаления команд
+
+
CommandRegistry.CommandAlreadyExistsException - Exception in client.commandline
+
 
+
CommandRegistry.CommandNotFoundException - Exception in client.commandline
+
 
+
CommandRegistry.HelpCommand - Class in client.commandline
+
 
+
connect() - Method in class client.net.UDPClient
+
 
+
createCoordinates() - Static method in class client.commandline.pdcommands.PeopleDatabaseCommands
+
 
+
createLocation() - Static method in class client.commandline.pdcommands.PeopleDatabaseCommands
+
 
+
createPerson() - Static method in class client.commandline.pdcommands.PeopleDatabaseCommands
+
 
+
+ + + +

D

+
+
description - Variable in class client.commandline.Command
+
 
+
disconnect() - Method in class client.net.UDPClient
+
 
+
+ + + +

E

+
+
executable - Variable in class client.commandline.Command
+
 
+
executeOnClient() - Method in class client.commandline.Command
+
 
+
executeOnClient() - Method in class client.commandline.pdcommands.PeopleDatabaseCommand
+
 
+
executeOnServer(UDPClient, Command) - Method in class client.commandline.CommandLineHandler
+
 
+
ExecuteScriptCommand() - Constructor for class client.commandline.CommandLineHandler.ExecuteScriptCommand
+
 
+
ExitCommand() - Constructor for class client.commandline.CommandLineHandler.ExitCommand
+
 
+
+ + + +

F

+
+
FilterContainsNameCommand - Class in client.commandline.pdcommands
+
 
+
FilterContainsNameCommand() - Constructor for class client.commandline.pdcommands.FilterContainsNameCommand
+
 
+
+ + + +

G

+
+
getCommand(String) - Static method in class client.commandline.CommandRegistry
+
 
+
getInstance() - Static method in class client.commandline.CommandLineHandler
+
 
+
getValue() - Method in enum client.commandline.LongStrings
+
 
+
+ + + +

H

+
+
HelpCommand() - Constructor for class client.commandline.CommandRegistry.HelpCommand
+
 
+
HistoryCommand() - Constructor for class client.commandline.CommandLineHandler.HistoryCommand
+
 
+
+ + + +

I

+
+
InfoCommand - Class in client.commandline.pdcommands
+
 
+
InfoCommand() - Constructor for class client.commandline.pdcommands.InfoCommand
+
 
+
+ + + +

L

+
+
Lab5Client - Class in client
+
 
+
Lab5Client() - Constructor for class client.Lab5Client
+
 
+
LongStrings - Enum in client.commandline
+
 
+
+ + + +

M

+
+
main(String[]) - Static method in class client.Lab5Client
+
 
+
ModeCommand() - Constructor for class client.commandline.CommandLineHandler.ModeCommand
+
 
+
+ + + +

P

+
+
peopleDatabase - Static variable in class client.commandline.pdcommands.PeopleDatabaseCommands
+
 
+
PeopleDatabaseCommand - Class in client.commandline.pdcommands
+
 
+
PeopleDatabaseCommand(String, boolean, String, Executable) - Constructor for class client.commandline.pdcommands.PeopleDatabaseCommand
+
 
+
PeopleDatabaseCommands - Class in client.commandline.pdcommands
+
+
Класс объявления всех команд, связанных с манипуляциями над объектом класса PeopleDatabase
+
+
PrintFieldDescendingLocationCommand - Class in client.commandline.pdcommands
+
 
+
PrintFieldDescendingLocationCommand() - Constructor for class client.commandline.pdcommands.PrintFieldDescendingLocationCommand
+
 
+
+ + + +

R

+
+
reassignCommand(Command) - Static method in class client.commandline.CommandRegistry
+
 
+
receive() - Method in class client.net.UDPClient
+
 
+
registerCommand(Command) - Static method in class client.commandline.CommandRegistry
+
 
+
registerCommands(Command...) - Static method in class client.commandline.CommandRegistry
+
 
+
registerDatabaseCommands() - Static method in class client.commandline.pdcommands.PeopleDatabaseCommands
+
+
Метод добавления всех команд в регистр команд, обязательно вызывайте его в своей программе, + если вам требуются данные команды
+
+
RemoveByIdCommand - Class in client.commandline.pdcommands
+
 
+
RemoveByIdCommand() - Constructor for class client.commandline.pdcommands.RemoveByIdCommand
+
 
+
removeInput() - Method in class client.commandline.CommandLineHandler
+
 
+
+ + + +

S

+
+
SaveCommand - Class in client.commandline.pdcommands
+
 
+
SaveCommand() - Constructor for class client.commandline.pdcommands.SaveCommand
+
 
+
send(Executable, Object[]) - Method in class client.net.UDPClient
+
 
+
ShowCommand - Class in client.commandline.pdcommands
+
 
+
ShowCommand() - Constructor for class client.commandline.pdcommands.ShowCommand
+
 
+
start() - Method in class client.commandline.CommandLineHandler
+
+
Метод, запускающий обработчик командной строки, для остановки требуется ввести команду "exit"
+
+
SumOfHeightCommand - Class in client.commandline.pdcommands
+
 
+
SumOfHeightCommand() - Constructor for class client.commandline.pdcommands.SumOfHeightCommand
+
 
+
+ + + +

U

+
+
UDPClient - Class in client.net
+
 
+
UDPClient(int) - Constructor for class client.net.UDPClient
+
 
+
UDPClient(String, int) - Constructor for class client.net.UDPClient
+
 
+
unregisterCommand(String) - Static method in class client.commandline.CommandRegistry
+
 
+
UpdateCommand - Class in client.commandline.pdcommands
+
 
+
UpdateCommand() - Constructor for class client.commandline.pdcommands.UpdateCommand
+
 
+
+ + + +

V

+
+
validate(String[]) - Method in class client.commandline.Command
+
 
+
validate(String[]) - Method in class client.commandline.CommandLineHandler.ExecuteScriptCommand
+
 
+
validate(String[]) - Method in class client.commandline.CommandLineHandler.ExitCommand
+
 
+
validate(String[]) - Method in class client.commandline.CommandLineHandler.HistoryCommand
+
 
+
validate(String[]) - Method in class client.commandline.CommandLineHandler.ModeCommand
+
 
+
validate(String[]) - Method in class client.commandline.CommandRegistry.HelpCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.AddCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.AddIfMaxCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.AddIfMinCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.ClearCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.FilterContainsNameCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.InfoCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.PrintFieldDescendingLocationCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.RemoveByIdCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.SaveCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.ShowCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.SumOfHeightCommand
+
 
+
validate(String[]) - Method in class client.commandline.pdcommands.UpdateCommand
+
 
+
validateIdCommand(String[]) - Static method in class client.commandline.pdcommands.PeopleDatabaseCommand
+
 
+
valueOf(String) - Static method in enum client.commandline.LongStrings
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum client.commandline.LongStrings
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
+A C D E F G H I L M P R S U V 
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Client/build/docs/javadoc/index.html b/Lab5Client/build/docs/javadoc/index.html new file mode 100644 index 0000000..3cf7b43 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/index.html @@ -0,0 +1,75 @@ + + + + + +Lab5Client 2.0 API + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/Lab5Client/build/docs/javadoc/overview-frame.html b/Lab5Client/build/docs/javadoc/overview-frame.html new file mode 100644 index 0000000..0f2a67d --- /dev/null +++ b/Lab5Client/build/docs/javadoc/overview-frame.html @@ -0,0 +1,23 @@ + + + + + +Overview List (Lab5Client 2.0 API) + + + + + + +

 

+ + diff --git a/Lab5Client/build/docs/javadoc/overview-summary.html b/Lab5Client/build/docs/javadoc/overview-summary.html new file mode 100644 index 0000000..d751211 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/overview-summary.html @@ -0,0 +1,147 @@ + + + + + +Overview (Lab5Client 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Lab5Client 2.0 API

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Packages 
PackageDescription
client 
client.commandline 
client.commandline.pdcommands 
client.net 
+
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Client/build/docs/javadoc/overview-tree.html b/Lab5Client/build/docs/javadoc/overview-tree.html new file mode 100644 index 0000000..7e6f35b --- /dev/null +++ b/Lab5Client/build/docs/javadoc/overview-tree.html @@ -0,0 +1,192 @@ + + + + + +Class Hierarchy (Lab5Client 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Enum Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
    • +
    +
  • +
+
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Client/build/docs/javadoc/package-list b/Lab5Client/build/docs/javadoc/package-list new file mode 100644 index 0000000..1a69557 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/package-list @@ -0,0 +1,4 @@ +client +client.commandline +client.commandline.pdcommands +client.net diff --git a/Lab5Client/build/docs/javadoc/script.js b/Lab5Client/build/docs/javadoc/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/Lab5Client/build/docs/javadoc/serialized-form.html b/Lab5Client/build/docs/javadoc/serialized-form.html new file mode 100644 index 0000000..d7c8260 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/serialized-form.html @@ -0,0 +1,266 @@ + + + + + +Serialized Form (Lab5Client 2.0 API) + + + + + + + + + + +
+

Serialized Form

+
+
+ +
+ + + + + + diff --git a/Lab5Client/build/docs/javadoc/stylesheet.css b/Lab5Client/build/docs/javadoc/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/Lab5Client/build/docs/javadoc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/Lab5Client/build/libs/Lab5Client-2.0.jar b/Lab5Client/build/libs/Lab5Client-2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..9bb66188717c8291042af3f3d25e085d7871ce89 GIT binary patch literal 74732 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 He>9B0_fVzg literal 0 HcmV?d00001 diff --git a/Lab5Client/build/libs/connection.properties b/Lab5Client/build/libs/connection.properties new file mode 100644 index 0000000..15fc23f --- /dev/null +++ b/Lab5Client/build/libs/connection.properties @@ -0,0 +1,2 @@ +hostname=helios.se.ifmo.ru +port=1234 \ No newline at end of file diff --git a/Lab5Client/build/libs/connection.properties.bak b/Lab5Client/build/libs/connection.properties.bak new file mode 100644 index 0000000..193632e --- /dev/null +++ b/Lab5Client/build/libs/connection.properties.bak @@ -0,0 +1,2 @@ +hostname=s316304@helios.se.ifmo.ru +port=1234 \ No newline at end of file diff --git a/Lab5Client/build/libs/lab5.xml b/Lab5Client/build/libs/lab5.xml new file mode 100644 index 0000000..bca9d56 --- /dev/null +++ b/Lab5Client/build/libs/lab5.xml @@ -0,0 +1,130 @@ + + + + 321321321 + + 2.0 + 2.0 + + 2022-04-18 + 321321 + 321312312 + BLACK + CHINA + + 2.0 + 2.0 + 2 + w + + + + Gena + + 5.0 + 6.0 + + 2022-04-18 + 124 + 231323232 + BLACK + JAPAN + + 2.0 + 3.0 + 4 + Tokyo + + + + Sasha + + 3.4 + -2.0 + + 2022-04-18 + 175 + 2312131231 + BROWN + JAPAN + + 2323.0 + 443.0 + 2 + Tokyo + + + + w + + 2.0 + 2.0 + + 2022-04-18 + 2 + 321321312 + ORANGE + THAILAND + + 2.0 + 2.0 + 2 + 2 + + + + w + + 2.0 + 2.0 + + 2022-03-22 + 1 + wwwwwwwwwwww + BLACK + GERMANY + + 2.0 + 2.0 + 2 + + + + + w + + 2.0 + 2.0 + + 2022-03-22 + + wwwwwwwwwwwwwwwww + BLACK + CHINA + + 2.0 + 2.0 + 2 + w + + + + wasd + + 2.0 + 2.0 + + 2022-04-18 + 2 + 2313213121 + BLACK + GERMANY + + 2.0 + 2.0 + 2 + wasd + + + 2022-03-22 + diff --git a/Lab5Client/build/libs/lab5.xml.bak b/Lab5Client/build/libs/lab5.xml.bak new file mode 100644 index 0000000..0f4e4ca --- /dev/null +++ b/Lab5Client/build/libs/lab5.xml.bak @@ -0,0 +1,130 @@ + + + + 321321321 + + 2.0 + 2.0 + + 2022-04-18 + 321321 + 321312312 + BLACK + CHINA + + 2.0 + 2.0 + 2 + w + + + + Gena + + 5.0 + 6.0 + + 2022-04-18 + 124 + 231323232 + BLACK + JAPAN + + 2.0 + 3.0 + 4 + Tokyo + + + + Sasha + + 3.4 + -2.0 + + 2022-04-18 + 175 + 2312131231 + BROWN + JAPAN + + 2323.0 + 443.0 + 2 + Tokyo + + + + w + + 2.0 + 2.0 + + 2022-04-18 + 2 + 321321312 + ORANGE + THAILAND + + 2.0 + 2.0 + 2 + 2 + + + + w + + 2.0 + 2.0 + + 2022-03-22 + 1 + wwwwwwwwwwww + BLACK + GERMANY + + 2.0 + 2.0 + 2 + + + + + w + + 2.0 + 2.0 + + 2022-03-22 + + wwwwwwwwwwwwwwwww + BLACK + CHINA + + 2.0 + 2.0 + 2 + w + + + + wasd + + 2.0 + 2.0 + + 2022-04-18 + 2 + 2313213121 + BLACK + GERMANY + + 2.0 + 2.0 + 2 + wasd + + + 2022-03-22 + diff --git a/Lab5Client/build/libs/run.bat b/Lab5Client/build/libs/run.bat new file mode 100644 index 0000000..b06d7dc --- /dev/null +++ b/Lab5Client/build/libs/run.bat @@ -0,0 +1,3 @@ +cls +java -jar Lab5-1.0.jar +pause diff --git a/Lab5Client/build/libs/run.bat.bak b/Lab5Client/build/libs/run.bat.bak new file mode 100644 index 0000000..0ac50be --- /dev/null +++ b/Lab5Client/build/libs/run.bat.bak @@ -0,0 +1,3 @@ +cls +java -jar Lab5-1.0.jar +pause \ No newline at end of file diff --git a/Lab5Client/build/libs/script.txt b/Lab5Client/build/libs/script.txt new file mode 100644 index 0000000..f5115d2 --- /dev/null +++ b/Lab5Client/build/libs/script.txt @@ -0,0 +1,18 @@ +show +info +add +Gena +124 +231323232 +black +japan +2 +3 +4 +Tokyo +5 +6 +show +execute_script script2.txt +sum_of_height +filter_contains_name e \ No newline at end of file diff --git a/Lab5Client/build/libs/script2.txt b/Lab5Client/build/libs/script2.txt new file mode 100644 index 0000000..f89072a --- /dev/null +++ b/Lab5Client/build/libs/script2.txt @@ -0,0 +1,15 @@ +add +Sasha +175 +2312131231 +brown +japan +2323 +443 +2 +Tokyo +3.4 +-2 +execute_script script.txt +show +print_field_descending_location \ No newline at end of file diff --git a/Lab5Client/build/tmp/compileJava/previous-compilation-data.bin b/Lab5Client/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..bbecc71dd5d294fcc3501531664c937d5b9fca93 GIT binary patch literal 7937 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 Z7sXUlE*Gh3mpGDo_UhgCtUDKT@Lwy~SlR#p literal 0 HcmV?d00001 diff --git a/Lab5Client/build/tmp/jar/MANIFEST.MF b/Lab5Client/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..012a17f --- /dev/null +++ b/Lab5Client/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: client.Lab5Client + diff --git a/Lab5Client/build/tmp/javadoc/javadoc.options b/Lab5Client/build/tmp/javadoc/javadoc.options new file mode 100644 index 0000000..183e73d --- /dev/null +++ b/Lab5Client/build/tmp/javadoc/javadoc.options @@ -0,0 +1,27 @@ +-classpath 'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\build\\classes\\java\\main;C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\build\\resources\\main;C:\\Users\\egor\\.gradle\\caches\\modules-2\\files-2.1\\org.projectlombok\\lombok\\1.18.22\\9c08ea24c6eb714e2d6170e8122c069a0ba9aacf\\lombok-1.18.22.jar;C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\build\\libs\\Lab5Core-2.0.jar' +-d 'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\build\\docs\\javadoc' +-doctitle 'Lab5Client 2.0 API' +-encoding 'UTF-8' +-notimestamp +-quiet +-windowtitle 'Lab5Client 2.0 API' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\Command.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\CommandLineHandler.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\CommandRegistry.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\LongStrings.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\AddCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\AddIfMaxCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\AddIfMinCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\ClearCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\FilterContainsNameCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\InfoCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\PeopleDatabaseCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\PeopleDatabaseCommands.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\PrintFieldDescendingLocationCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\RemoveByIdCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\SaveCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\ShowCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\SumOfHeightCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\commandline\\pdcommands\\UpdateCommand.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\Lab5Client.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Client\\src\\main\\java\\client\\net\\UDPClient.java' diff --git a/Lab5Client/build/tmp/shadowJar/MANIFEST.MF b/Lab5Client/build/tmp/shadowJar/MANIFEST.MF new file mode 100644 index 0000000..012a17f --- /dev/null +++ b/Lab5Client/build/tmp/shadowJar/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: client.Lab5Client + diff --git a/Lab5Client/src/main/java/client/Lab5Client.java b/Lab5Client/src/main/java/client/Lab5Client.java new file mode 100644 index 0000000..20e45ff --- /dev/null +++ b/Lab5Client/src/main/java/client/Lab5Client.java @@ -0,0 +1,28 @@ +package client; + +import client.commandline.CommandLineHandler; +import client.commandline.pdcommands.PeopleDatabaseCommands; +import common.collection.Database; +import common.collection.PeopleDatabase; + +import java.util.logging.Logger; + +public class Lab5Client { + + public static void main(String[] args) { + Logger logger = Logger.getLogger("Lab5Client"); + CommandLineHandler cmd = CommandLineHandler.getInstance(); + + PeopleDatabaseCommands.registerDatabaseCommands(); + PeopleDatabase peopleDatabase = new PeopleDatabase(logger); + try { + peopleDatabase.load(); + } catch (Database.DatabaseLoadFailedException e) { + System.out.println(e.getMessage()); + System.exit(-1); + } + PeopleDatabaseCommands.peopleDatabase = peopleDatabase; + + cmd.start(); + } +} diff --git a/Lab5Client/src/main/java/client/commandline/Command.java b/Lab5Client/src/main/java/client/commandline/Command.java new file mode 100644 index 0000000..86b0d1a --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/Command.java @@ -0,0 +1,31 @@ +package client.commandline; + +import common.commandline.Executable; +import common.commandline.response.CommandResult; +import lombok.Getter; + +import java.io.Serializable; + +@Getter +public abstract class Command implements Serializable { + + protected final String alias; + protected final String description; + protected final boolean clientOnly; + protected final Executable executable; + + protected Object[] args; + + public Command(String alias, boolean clientOnly, String description, Executable executable) { + this.alias = alias; + this.clientOnly = clientOnly; + this.description = description; + this.executable = executable; + } + + public abstract boolean validate(String[] args); + + public CommandResult executeOnClient() { + return executable.execute(args); + } +} diff --git a/src/main/java/ru/erius/lab5/commandline/CommandLineHandler.java b/Lab5Client/src/main/java/client/commandline/CommandLineHandler.java similarity index 53% rename from src/main/java/ru/erius/lab5/commandline/CommandLineHandler.java rename to Lab5Client/src/main/java/client/commandline/CommandLineHandler.java index bd5a604..a484b30 100644 --- a/src/main/java/ru/erius/lab5/commandline/CommandLineHandler.java +++ b/Lab5Client/src/main/java/client/commandline/CommandLineHandler.java @@ -1,9 +1,16 @@ -package ru.erius.lab5.commandline; +package client.commandline; -import ru.erius.lab5.util.UtilFunctions; +import client.net.UDPClient; +import common.commandline.response.CommandResult; +import common.commandline.response.DefaultResponse; +import common.parser.ConnectionProperties; +import common.util.UtilFunctions; import java.io.*; -import java.util.*; +import java.util.Deque; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; import java.util.function.Function; import java.util.function.Predicate; @@ -18,11 +25,13 @@ public final class CommandLineHandler { private final static CommandLineHandler instance = new CommandLineHandler(); + private final UDPClient udp = new UDPClient(ConnectionProperties.getHostname(), ConnectionProperties.getPort()); private final Deque inputs = new LinkedList<>(); private final Deque fileNames = new LinkedList<>(); private final List history = new LinkedList<>(); private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); private boolean isActive = false; + private boolean clientMode = true; static { clearScreen(); @@ -36,12 +45,7 @@ public final class CommandLineHandler { } private static void registerBasicCommands() { - CommandRegistry.registerCommand("exit", args -> instance.exit(), - "exit : завершить программу (без сохранения в файл)"); - CommandRegistry.registerCommand("history", instance::showHistory, - "history [count] : вывести последние count введенных команд, по умолчанию count равен 6"); - CommandRegistry.registerCommand("execute_script", instance::executeScript, - "execute_script {file_name} : считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме."); + CommandRegistry.registerCommands(new ExitCommand(), new HistoryCommand(), new ExecuteScriptCommand(), new ModeCommand()); } /** @@ -77,65 +81,33 @@ public final class CommandLineHandler { args = new String[split.length - 1]; System.arraycopy(split, 1, args, 0, split.length - 1); } + executeCommand(alias, args); + } + + private void executeCommand(String alias, String[] args) { Command command = CommandRegistry.getCommand(alias); if (command == null) { - System.out.println("Неизвестная команда " + alias + ", напишите help для отображения всех существующих команд"); + System.err.println("Неизвестная команда " + alias + ", напишите help для отображения всех существующих команд"); return; } - command.execute(args); + boolean argsValid = command.validate(args); + if (!argsValid) return; + CommandResult result = command.isClientOnly() || clientMode ? + command.executeOnClient() : executeOnServer(udp, command); + PrintStream ps = result.getResponse() == DefaultResponse.OK ? System.out : System.err; + if (result.getValue() == null) ps.println(result.getResponse().getMsg()); + else ps.println(result.getValue()); updateHistory(alias); } - /** - * Метод, останавливающий работу обработчика командной строки - */ - public void exit() { - this.isActive = false; - System.out.println("Выход из программы..."); - } - - public void showHistory(String[] args) { - int lines = 6; - if (args.length >= 1 && UtilFunctions.intOrNull(args[0]) != null) - lines = Integer.parseInt(args[0]); - if (lines <= 0) { - System.out.println("[count] должен быть больше 0"); - return; - } - int start = lines < history.size() ? history.size() - lines : 0; - System.out.println("История последних команд:"); - for (int i = start; i < history.size(); i++) - System.out.println(history.get(i)); - } - - public void executeScript(String[] args) { - if (args.length < 1) { - System.out.println("Недостаточно данных"); - return; - } - - String fileName = args[0]; - File file = new File(fileName); - if (!file.exists() || file.isDirectory()) { - System.out.println("Не удалось найти файл " + fileName); - return; - } - - Reader streamReader; - try { - streamReader = new InputStreamReader(new FileInputStream(file)); - } catch (FileNotFoundException e) { - e.printStackTrace(); - System.out.println("Что-то пошло не так"); - return; - } - addNewInput(streamReader, fileName); - } - private void updateHistory(String command) { history.add(command); } + public CommandResult executeOnServer(UDPClient udp, Command command) { + return udp.send(command.executable, command.args); + } + /** * Метод, ожидающий ввода из потока ввода {@link #reader reader} и возвращающий результат, * печатает запрос msg перед ожиданием данных (если их вводит пользователь), @@ -221,4 +193,108 @@ public final class CommandLineHandler { Reader reader = inputs.isEmpty() ? new InputStreamReader(System.in) : inputs.peek(); this.reader = new BufferedReader(reader); } + + public static class ExitCommand extends Command { + public ExitCommand() { + super("exit", true, "exit : завершить программу (без сохранения в файл)", + args -> { + instance.isActive = false; + return new CommandResult("Выход из программы...", DefaultResponse.OK); + }); + } + + @Override + public boolean validate(String[] args) { + return true; + } + } + + public static class HistoryCommand extends Command { + public HistoryCommand() { + super("history", true, "history [count] : вывести последние count введенных команд, по умолчанию count равен 6", + args -> { + int lines = args.length > 0 ? (int) args[0] : 6; + int start = lines < instance.history.size() ? instance.history.size() - lines : 0; + StringBuilder result = new StringBuilder("История последних команд:\n"); + for (int i = start; i < instance.history.size(); i++) + result.append(instance.history.get(i)).append("\n"); + return new CommandResult(result.toString(), DefaultResponse.OK); + }); + } + + @Override + public boolean validate(String[] args) { + Integer value = 6; + this.args = new Object[]{ value }; + if (args.length > 0) { + value = UtilFunctions.intOrNull(args[0]); + if (value != null) { + this.args = new Object[]{ value }; + return true; + } else return false; + } + return true; + } + } + + public static class ExecuteScriptCommand extends Command { + public ExecuteScriptCommand() { + super("execute_script", true, "execute_script {file_name} : считать и исполнить скрипт из указанного файла. В скрипте содержатся команды в таком же виде, в котором их вводит пользователь в интерактивном режиме.", + args -> { + String fileName = (String) args[0]; + File file = new File(fileName); + if (!file.exists() || file.isDirectory()) + return new CommandResult(null, DefaultResponse.FILE_NOT_FOUND); + + Reader streamReader; + try { + streamReader = new InputStreamReader(new FileInputStream(file)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return new CommandResult(null, DefaultResponse.UNKNOWN); + } + instance.addNewInput(streamReader, fileName); + return new CommandResult(null, DefaultResponse.OK); + }); + } + + @Override + public boolean validate(String[] args) { + if (args.length < 1) { + System.err.println("Недостаточно данных"); + return false; + } + this.args = args; + return true; + } + } + + public static class ModeCommand extends Command { + public ModeCommand() { + super("mode", true, "mode [sw] : выводит режим работы программы, если написать sw, меняет режим с серверного на клиентский или наоборот", + args -> { + String result; + if (args.length == 0) { + result = "Программа работает в режиме клиент " + (instance.clientMode ? "" : "+ сервер"); + } else { + instance.clientMode = !instance.clientMode; + if (instance.clientMode) { + result = "Режим работы сменен на клиент"; + instance.udp.disconnect(); + } else { + result = "Режим работы сменен на клиент + сервер"; + instance.udp.connect(); + } + } + return new CommandResult(result, DefaultResponse.OK); + }); + } + + @Override + public boolean validate(String[] args) { + if (args.length > 0 && args[0].equals("sw")) this.args = args; + else this.args = new Object[]{}; + return true; + } + } } diff --git a/src/main/java/ru/erius/lab5/commandline/CommandRegistry.java b/Lab5Client/src/main/java/client/commandline/CommandRegistry.java similarity index 50% rename from src/main/java/ru/erius/lab5/commandline/CommandRegistry.java rename to Lab5Client/src/main/java/client/commandline/CommandRegistry.java index 3d866b2..b3a7258 100644 --- a/src/main/java/ru/erius/lab5/commandline/CommandRegistry.java +++ b/Lab5Client/src/main/java/client/commandline/CommandRegistry.java @@ -1,41 +1,40 @@ -package ru.erius.lab5.commandline; +package client.commandline; + +import common.commandline.response.CommandResult; +import common.commandline.response.DefaultResponse; -import java.util.Comparator; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * Класс регистра команд, используемый для добавления, переопределения или удаления команд */ public final class CommandRegistry { - private static final Map COMMANDS = new HashMap<>(); + private static final Map COMMANDS = new HashMap<>(); private CommandRegistry() { } static { - registerCommand("help", args -> help(), - "help : вывести справку по доступным командам"); + registerCommand(new HelpCommand()); } - public static void registerCommand(String alias, Command command) { - registerCommand(alias, command, null); - } - - public static void registerCommand(String alias, Command command, String desc) { - if (COMMANDS.containsKey(alias)) + public static void registerCommand(Command command) { + if (COMMANDS.containsKey(command.getAlias())) throw new CommandAlreadyExistsException("Команда %s уже существует, " + - "используйте метод reassignCommand() для переопределения существующей команды", alias); - COMMANDS.put(alias, new DescriptiveCommand(command, desc)); + "используйте метод reassignCommand() для переопределения существующей команды", command.getAlias()); + COMMANDS.put(command.getAlias(), command); } - public static void reassignCommand(String alias, Command command, String desc) { - if (!COMMANDS.containsKey(alias)) - throw new CommandNotFoundException("Не удалось переопределить несуществующую команду %s", alias); - COMMANDS.put(alias, new DescriptiveCommand(command, desc)); + public static void registerCommands(Command... commands) { + for (Command command : commands) registerCommand(command); + } + + public static void reassignCommand(Command command) { + if (!COMMANDS.containsKey(command.getAlias())) + throw new CommandNotFoundException("Не удалось переопределить несуществующую команду %s", command.getAlias()); + COMMANDS.put(command.getAlias(), command); } public static void unregisterCommand(String alias) { @@ -45,20 +44,7 @@ public final class CommandRegistry { } public static Command getCommand(String alias) { - DescriptiveCommand command = COMMANDS.get(alias); - return command == null ? null : command.getCommand() ; - } - - public static void help() { - System.out.println(LongStrings.LINE.getValue() + "\n"); - List commands = COMMANDS.values().stream() - .sorted(Comparator.comparing(DescriptiveCommand::getDesc)) - .collect(Collectors.toList()); - for (DescriptiveCommand dc : commands) { - String desc = dc.getDesc(); - if (desc != null) System.out.println(desc + "\n"); - } - System.out.println(LongStrings.LINE.getValue()); + return COMMANDS.get(alias); } public static class CommandNotFoundException extends RuntimeException { @@ -82,4 +68,24 @@ public final class CommandRegistry { super(String.format(message, alias)); } } + + public static class HelpCommand extends Command { + public HelpCommand() { + super("help", true, "help : вывести справку по доступным командам", + args -> { + StringBuilder result = new StringBuilder(LongStrings.LINE.getValue() + "\n\n"); + for (Command c : COMMANDS.values()) { + String desc = c.getDescription(); + if (desc != null) result.append(desc).append("\n\n"); + } + result.append(LongStrings.LINE.getValue()); + return new CommandResult(result.toString(), DefaultResponse.OK); + }); + } + + @Override + public boolean validate(String[] args) { + return true; + } + } } diff --git a/src/main/java/ru/erius/lab5/commandline/LongStrings.java b/Lab5Client/src/main/java/client/commandline/LongStrings.java similarity index 95% rename from src/main/java/ru/erius/lab5/commandline/LongStrings.java rename to Lab5Client/src/main/java/client/commandline/LongStrings.java index 8f6cf00..76ee683 100644 --- a/src/main/java/ru/erius/lab5/commandline/LongStrings.java +++ b/Lab5Client/src/main/java/client/commandline/LongStrings.java @@ -1,4 +1,4 @@ -package ru.erius.lab5.commandline; +package client.commandline; public enum LongStrings { LINE("=================================================================================================="), diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/AddCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/AddCommand.java new file mode 100644 index 0000000..3f8e008 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/AddCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class AddCommand extends PeopleDatabaseCommand { + public AddCommand() { + super("add", false, "add : добавить новый элемент в коллекцию", + Executables.ADD.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null, PeopleDatabaseCommands.createPerson() }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/AddIfMaxCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/AddIfMaxCommand.java new file mode 100644 index 0000000..a0a7120 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/AddIfMaxCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class AddIfMaxCommand extends PeopleDatabaseCommand { + public AddIfMaxCommand() { + super("add_if_max", false, "add_if_max : добавить новый элемент в коллекцию, если его значение превышает значение наибольшего элемента этой коллекции", + Executables.ADD_IF_MAX.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null, PeopleDatabaseCommands.createPerson() }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/AddIfMinCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/AddIfMinCommand.java new file mode 100644 index 0000000..3a10ef4 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/AddIfMinCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class AddIfMinCommand extends PeopleDatabaseCommand { + public AddIfMinCommand() { + super("add_if_min", false, "add_if_min : добавить новый элемент в коллекцию, если его значение меньше, чем у наименьшего элемента этой коллекции", + Executables.ADD_IF_MIN.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null, PeopleDatabaseCommands.createPerson() }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/ClearCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/ClearCommand.java new file mode 100644 index 0000000..f8f9b64 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/ClearCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class ClearCommand extends PeopleDatabaseCommand { + public ClearCommand() { + super("clear", false, "clear : очистить коллекцию", + Executables.CLEAR.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null }; + return true; + } +} \ No newline at end of file diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/FilterContainsNameCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/FilterContainsNameCommand.java new file mode 100644 index 0000000..73bc948 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/FilterContainsNameCommand.java @@ -0,0 +1,20 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class FilterContainsNameCommand extends PeopleDatabaseCommand { + public FilterContainsNameCommand() { + super("filter_contains_name", false, "filter_contains_name {name} : вывести элементы, значение поля name которых содержит заданную подстроку", + Executables.FILTER_CONTAINS_NAME.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + if (args.length < 1) { + System.err.println("Недостаточно данных"); + return false; + } + this.args = new Object[]{ null, args[0] }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/InfoCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/InfoCommand.java new file mode 100644 index 0000000..13fbc8d --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/InfoCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class InfoCommand extends PeopleDatabaseCommand { + public InfoCommand() { + super("info", false, "info : вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)", + Executables.INFO.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/PeopleDatabaseCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/PeopleDatabaseCommand.java new file mode 100644 index 0000000..6d1d539 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/PeopleDatabaseCommand.java @@ -0,0 +1,30 @@ +package client.commandline.pdcommands; + +import client.commandline.Command; +import common.commandline.Executable; +import common.commandline.response.CommandResult; +import common.util.UtilFunctions; + +public abstract class PeopleDatabaseCommand extends Command { + public PeopleDatabaseCommand(String alias, boolean clientOnly, String description, Executable executable) { + super(alias, clientOnly, description, executable); + } + + public CommandResult executeOnClient() { + args[0] = PeopleDatabaseCommands.peopleDatabase; + return super.executeOnClient(); + } + + public static boolean validateIdCommand(String[] args) { + if (args.length < 1) { + System.err.println("Недостаточно данных"); + return false; + } + Long id = UtilFunctions.longOrNull(args[0]); + if (id == null) { + System.err.println("{id} должен быть целым числом"); + return false; + } + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/PeopleDatabaseCommands.java b/Lab5Client/src/main/java/client/commandline/pdcommands/PeopleDatabaseCommands.java new file mode 100644 index 0000000..565ac0c --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/PeopleDatabaseCommands.java @@ -0,0 +1,82 @@ +package client.commandline.pdcommands; + +import client.commandline.CommandLineHandler; +import client.commandline.CommandRegistry; +import common.collection.PeopleDatabase; +import common.data.*; +import common.util.UtilFunctions; + +import java.util.Arrays; +import java.util.Locale; + +/** + * Класс объявления всех команд, связанных с манипуляциями над объектом класса PeopleDatabase + * + * @see PeopleDatabase + */ +public final class PeopleDatabaseCommands { + + public static PeopleDatabase peopleDatabase; + private static final String COLORS = Arrays.toString(Color.values()), + COUNTRIES = Arrays.toString(Country.values()); + private static final CommandLineHandler CMD = CommandLineHandler.getInstance(); + + private PeopleDatabaseCommands() {} + + /** + * Метод добавления всех команд в регистр команд, обязательно вызывайте его в своей программе, + * если вам требуются данные команды + */ + public static void registerDatabaseCommands() { + CommandRegistry.registerCommands(new InfoCommand(), new ShowCommand(), new AddCommand(), new AddIfMaxCommand(), + new AddIfMinCommand(), new ClearCommand(), new FilterContainsNameCommand(), new PrintFieldDescendingLocationCommand(), + new RemoveByIdCommand(), new SaveCommand(), new SumOfHeightCommand(), new UpdateCommand()); + } + + public static Person createPerson() { + System.out.println("Создание нового объекта класса Person"); + String name = CMD.awaitInput("Введите имя:", "Введите непустую строку", + input -> !input.isEmpty()); + Integer height = CMD.awaitInput("Введите рост:", "Введите целое число, большее нуля", + input -> { + Integer result = UtilFunctions.intOrNull(input); + return result != null && result > 0 || input.isEmpty(); + }, input -> input.isEmpty() ? null : Integer.parseInt(input)); + String passportID = CMD.awaitInput("Введите номер паспорта:", "Введите минимум 8 символов", + input -> input.length() >= 8 || input.isEmpty(), input -> input.isEmpty() ? null : input); + Color eyeColor = CMD.awaitInput("Введите цвет глаз " + COLORS + ":", "Введите один из предложенных цветов", + input -> UtilFunctions.enumOrNull(input.toUpperCase(Locale.ROOT), Color.class) != null, + input -> Color.valueOf(input.toUpperCase(Locale.ROOT))); + Country nationality = CMD.awaitInput("Введите национальность " + COUNTRIES + ":", "Введите одну из предложенных стран", + input -> UtilFunctions.enumOrNull(input.toUpperCase(Locale.ROOT), Country.class) != null, + input -> Country.valueOf(input.toUpperCase(Locale.ROOT))); + Location location = createLocation(); + Coordinates coordinates = createCoordinates(); + return new Person(name, coordinates, height, passportID, eyeColor, nationality, location); + } + + public static Location createLocation() { + System.out.println("Создание нового объекта класса Location"); + double x = CMD.awaitInput("Введите x:", "Введите дробное число", + input -> UtilFunctions.doubleOrNull(input) != null, Double::parseDouble); + float y = CMD.awaitInput("Введите y:", "Введите дробное число", + input -> UtilFunctions.floatOrNull(input) != null, Float::parseFloat); + long z = CMD.awaitInput("Введите z:", "Введите целое число", + input -> UtilFunctions.longOrNull(input) != null, Long::parseLong); + String name = CMD.awaitInput("Введите название:", "Строка не может быть пустой", + input -> true, input -> input.isEmpty() ? null : input); + return new Location(x, y, z, name); + } + + public static Coordinates createCoordinates() { + System.out.println("Создание нового объекта класса Coordinates"); + float x = CMD.awaitInput("Введите x:", "Введите дробное число", + input -> UtilFunctions.floatOrNull(input) != null, Float::parseFloat); + float y = CMD.awaitInput("Введите y:", "Введите дробное число, большее -816", + input -> { + Float result = UtilFunctions.floatOrNull(input); + return result != null && result > -816F; + }, Float::parseFloat); + return new Coordinates(x, y); + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.java new file mode 100644 index 0000000..c98b240 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/PrintFieldDescendingLocationCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class PrintFieldDescendingLocationCommand extends PeopleDatabaseCommand { + public PrintFieldDescendingLocationCommand() { + super("print_field_descending_location", false, "print_field_descending_location : вывести значения поля location всех элементов в порядке убывания", + Executables.PRINT_FIELD_DESCENDING_LOCATION.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/RemoveByIdCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/RemoveByIdCommand.java new file mode 100644 index 0000000..d467081 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/RemoveByIdCommand.java @@ -0,0 +1,21 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; +import common.util.UtilFunctions; + +public class RemoveByIdCommand extends PeopleDatabaseCommand { + public RemoveByIdCommand() { + super("remove_by_id", false, "remove_by_id {id} : удалить элемент из коллекции по его {id}", + Executables.REMOVE_BY_ID.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + if (PeopleDatabaseCommand.validateIdCommand(args)) { + Long id = UtilFunctions.longOrNull(args[0]); + this.args = new Object[]{ null, id }; + return true; + } + return false; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/SaveCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/SaveCommand.java new file mode 100644 index 0000000..aca4dab --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/SaveCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class SaveCommand extends PeopleDatabaseCommand { + public SaveCommand() { + super("save", false, "save : сохранить коллекцию в файл", + Executables.SAVE.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/ShowCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/ShowCommand.java new file mode 100644 index 0000000..a0a6b3d --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/ShowCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class ShowCommand extends PeopleDatabaseCommand { + public ShowCommand() { + super("show", false, "show : вывести в стандартный поток вывода все элементы коллекции в строковом представлении", + Executables.SHOW.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/SumOfHeightCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/SumOfHeightCommand.java new file mode 100644 index 0000000..c6c923e --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/SumOfHeightCommand.java @@ -0,0 +1,16 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; + +public class SumOfHeightCommand extends PeopleDatabaseCommand { + public SumOfHeightCommand() { + super("sum_of_height", false, "sum_of_height : вывести сумму значений поля height для всех элементов коллекции", + Executables.SUM_OF_HEIGHT.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + this.args = new Object[]{ null }; + return true; + } +} diff --git a/Lab5Client/src/main/java/client/commandline/pdcommands/UpdateCommand.java b/Lab5Client/src/main/java/client/commandline/pdcommands/UpdateCommand.java new file mode 100644 index 0000000..563bd63 --- /dev/null +++ b/Lab5Client/src/main/java/client/commandline/pdcommands/UpdateCommand.java @@ -0,0 +1,21 @@ +package client.commandline.pdcommands; + +import common.commandline.Executables; +import common.util.UtilFunctions; + +public class UpdateCommand extends PeopleDatabaseCommand { + public UpdateCommand() { + super("update", false, "update {id} : обновить значение элемента коллекции, {id} которого равен заданному", + Executables.UPDATE.getExecutable()); + } + + @Override + public boolean validate(String[] args) { + if (PeopleDatabaseCommand.validateIdCommand(args)) { + Long id = UtilFunctions.longOrNull(args[0]); + this.args = new Object[]{ null, id, PeopleDatabaseCommands.createPerson() }; + return true; + } + return false; + } +} diff --git a/Lab5Client/src/main/java/client/net/UDPClient.java b/Lab5Client/src/main/java/client/net/UDPClient.java new file mode 100644 index 0000000..62a8901 --- /dev/null +++ b/Lab5Client/src/main/java/client/net/UDPClient.java @@ -0,0 +1,82 @@ +package client.net; + +import common.commandline.Executable; +import common.commandline.response.CommandResult; +import common.commandline.response.DefaultResponse; + +import java.io.*; +import java.net.*; + +public class UDPClient { + + private String hostname; + private final int port; + private InetAddress address; + private DatagramSocket socket; + boolean available = false; + + public UDPClient(int port) { + this.port = port; + } + + public UDPClient(String hostname, int port) { + this.hostname = hostname; + this.port = port; + } + + public void connect() { + try { + address = hostname == null ? InetAddress.getLocalHost() : InetAddress.getByName(hostname); + socket = new DatagramSocket(); + socket.setSoTimeout(10000); + available = true; + } catch (UnknownHostException | SocketException e) { + System.err.println("Ошибка при подключении к серверу, хост не найден"); + available = false; + } + } + + public void disconnect() { + if (!available) return; + socket.close(); + available = false; + } + + public CommandResult send(Executable executable, Object[] args) { + if (!available) return new CommandResult(null, DefaultResponse.HOST_NOT_FOUND); + byte[] buffer; + try ( + ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream) + ) { + objectOutputStream.writeObject(executable); + objectOutputStream.writeObject(args); + buffer = byteOutputStream.toByteArray(); + DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, port); + socket.send(request); + } catch (IOException e) { + return new CommandResult("Нет ответа от сервера", DefaultResponse.SERVER_ERROR); + } + return receive(); + } + + public CommandResult receive() { + byte[] buffer = new byte[65535]; + DatagramPacket response = new DatagramPacket(buffer, buffer.length); + try (ByteArrayInputStream byteInputStream = new ByteArrayInputStream(buffer)) { + socket.receive(response); + ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream); + CommandResult result = (CommandResult) objectInputStream.readObject(); + objectInputStream.close(); + return result; + } catch (SocketTimeoutException e) { + return new CommandResult("Сервер не отвечает", DefaultResponse.SERVER_ERROR); + } catch (IOException e) { + return new CommandResult("Нестабильное соединении", DefaultResponse.SERVER_ERROR); + } catch (ClassNotFoundException e) { + return new CommandResult("Не удалось преобразовать результат, не существует нужного класса", DefaultResponse.CLASS_NOT_FOUND); + } catch (ClassCastException e) { + return new CommandResult("Не удалось преобразовать результат, ожидался объект другого типа", DefaultResponse.TYPE_ERROR); + } + } +} diff --git a/Lab5Core/build.gradle.kts b/Lab5Core/build.gradle.kts new file mode 100644 index 0000000..2b5be4e --- /dev/null +++ b/Lab5Core/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + java +} + +group = "ru.erius.lab5" +version = "2.0" + +repositories { + mavenCentral() +} + +dependencies { + testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") + compileOnly("org.projectlombok:lombok:1.18.22") + annotationProcessor("org.projectlombok:lombok:1.18.22") +} + +tasks.getByName("test") { + useJUnitPlatform() +} + +tasks.compileJava { + options.encoding = "UTF-8" +} + +tasks.javadoc { + options.encoding = "UTF-8" +} diff --git a/Lab5Core/build/classes/java/main/common/collection/Database$DatabaseLoadFailedException.class b/Lab5Core/build/classes/java/main/common/collection/Database$DatabaseLoadFailedException.class new file mode 100644 index 0000000000000000000000000000000000000000..492ba0a2f69bd0e6894878186ab430e7fe05d1d5 GIT binary patch literal 1228 zcmbVKT~E_c7=F&aj@02;=VUOHAt8UHg|_3#ccWof2B)IyQpIfhws6lx;HbSW zW}<-;GF0D)NOVOg+rH=>3&)kcw_j~}89BbkkU#M}863GH3?((cYTN#B=zC4ucU@_# zp5|nJXYw)!sKvmCG7LpOR`ZW~hTS=y7P!0=(SX6aec*Hu_+OOUIGL<1Mj=s`6OgkG zhJ)L|bjEXsRq&PM_zYJa86AHV*z%ZiWmuj>^jsy7#~my&tjyAQ-@TwvIiBS46uauY ztd=#7J%*S67d=C1Mv(Zj3EHte`oYfqU??Jn*GWIx{Ktg*vCdXKQPN!u>x*S#3px6s z)s+QP?rAk>cZd|-K+bAhfqkR56z!dV=Dhl*8sFK5D+{4meR~7$Z literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/collection/Database$DatabaseSaveFailedException.class b/Lab5Core/build/classes/java/main/common/collection/Database$DatabaseSaveFailedException.class new file mode 100644 index 0000000000000000000000000000000000000000..c8f1fe3449329983d52f60a4be49a0fe21db4698 GIT binary patch literal 1228 zcmbVKZBNrs6n<{^a-|Mo!znMmfFffZvP2DPM)-n~kSzM4gv6Mb+?DHA(zT@R(7)v; zjEVjLf0Xgu?yf7i@xd**>pAzF=WYG{=f^JqFHkqZagXD^i3fP7idA*2aXjW&XDIHv zz8mi`R5#nF;#@R6;dh&M9J+qDRX=9P?*}K6VXp1^^4*}{k>Qc(c+{!114nqrB6L-) zoB6osMhq)&L@YWYlD0UP2g3E_$=k1vJd54HXDA)|z6|$05k-=QU$vc}-w*tz6L_9< z)J$`nayD#w!&Hc(Ud zRdp9oBx<`Kh)W(XIgrSVR^bttf5FR zwE7gllzTc&s`g;e7bsed3$SnWWZ)*9X42iD=^9E@-x*F}7V}imJj$pLhQeCVST=QY zbXT?-`JXU8d-Hd7dy>!;O@ok}_1ZaKcNta*2f{&2=g7 h!c_-5l=sUic`MzFlrNJ~11p%LUz0jTJi;x^`~}nK0D}Mk literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/collection/Database.class b/Lab5Core/build/classes/java/main/common/collection/Database.class new file mode 100644 index 0000000000000000000000000000000000000000..8603206f4575ef469be37ba29be783e4ee8f9191 GIT binary patch literal 403 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 A`2YX_ literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/commandline/Executable.class b/Lab5Core/build/classes/java/main/common/commandline/Executable.class new file mode 100644 index 0000000000000000000000000000000000000000..52dda24092336ecfe9460849b87a9ead857a7220 GIT binary patch literal 307 zcmZvYKT88a5XIlbc&ky-B8`REYU4I`X%sOa1cU@^tTyW?8}?@9Zdb&QX5k0$Ly2=| zp#+Qh!yEX$$9#Uhe*iegp25gq$6%LW_?3OhOt?6?pRL@Bv(d?uytm6_6=S6a;`7X3U)k~3- zT@H#O9RKm27V(|z;*Df(9-U`}AN`Z$*Me}c9-c7nrI74`o8V%2>%vq7!a!?7pFu;y S5SzLUQ1#tlOJ}9`ZQvUw&{((t literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/commandline/Executables.class b/Lab5Core/build/classes/java/main/common/commandline/Executables.class new file mode 100644 index 0000000000000000000000000000000000000000..56c3fca168e820df5fae55e2473c353218d12c48 GIT binary patch literal 12350 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 literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/commandline/response/CommandResult.class b/Lab5Core/build/classes/java/main/common/commandline/response/CommandResult.class new file mode 100644 index 0000000000000000000000000000000000000000..7d55a0343e086fd82bca374a4b613f5f2fbe58ac GIT binary patch literal 782 zcma)4%TB^T6g|`OkcWU3-|vm#VeG~o#tn%pqKOz1mjxRfQd(0A3%^Pejfo3Cz>hMX zX(5Uj;%4s5oqHbl&U}2ny#qMGUK(+%rx3%2S~io|N@6>S9fA1Ba)!2m(dbzt%XBQa zYc>O4y4{+DuPx+PoUq5tBHTt_;ouYNc7q|B;ki z0U+S{m zvpa!6F-%F%Y}%ZQBOjt!>7{ZD2Ym53_%P65C`o<^L#ZATK5^LF$61wIW!=aT(G`=z)U5?C2=$s8Nh9dEmXe6AJpz5JmA{1K*#bVKz zgznk!jIOuC-SOnj(6i&Ng{U5HKb4mwOOfcUhy;7Sye2^lucscQg1J;-EvQ#Y*}@u8 zkcSd8;pLDnVeHN+*}ER3a@9;(!nn_W+E~YI@m_{n3e$ul)%6vPf1Y=7t^U+B2~(A_Erf;A(f{}uBmJxTe&X5cS51X6KW?UI4WOfso@SiyH-e5 zswGNu=7eZJL0xN^$_*ZSug`xxnFM7jP3s{D*nJ$3X+wny)%?_{dc8jRQh3|ax%FbT zl+Mg&dEC86mU4_&M8z22qo9hrSdlPtiltWRK7OU*Jy4Q2F-p5({$w`Izszm(iMeNP zdriao(L5kmgB&&b+xA*p)&{w1*7syKIrx1QgBX%9VE#sdf0_+1gT3Ys#R{FBdmOIf zG6U}(ts>wD)*%X z?u66Vy~N$H9#Q@}dCVr;HEWaV7~HqDYmkVwZr2}(Yg`eYw%-;#RL0+QBV<3IY`hf!3XINXD zLPdbFgXYgfv`*wXF`x60XavpYeX1B?XxH;^2QMepdD&JxTQ>>Lbgo$7MSI~EL|4}{ z=?Z;*uC?Eu*<7kzo@~1Yt*=!3{o&#i*Vi7`f-U+J(^u)6JOBxo;GRCmO9YUl9TAe= zqLB0wgrq?WNrMxTh9V?&O#fLl-eADf&)0!$Cps{WtCamMvM!P2pWA@+2W(Ga-zH1K z+w^paGdtlYaIJ-(fK7Panj=t$^C=vRx4nRWhdk;b3h#1lI;Yz}Pp-HCJ9S5hz{vT1 zxB{a!$U6eVHM{7P$WrYdbP{*Y)kl$>@dMEhYuu3?ljOBwiYk4G>n(mklH8Fqum|}l zwLX#VkeaiVPQgc*ZUz5C!{J}80Y_3(>{`b@+`H%$rs~jM5oVV#yPcXxm_5SOT-vL` z>=ou2S?d$#Sz*4WXy=64FU;3HE{%Gp)E9(((Iabb2;1vXo=|POflfW?FwmtZod$aJ zq{~3Bo|Fxo)su>Wem&_S*98*f^Xj{hc!r1XZJ6E|zvph6;zh_bD}|=ifhD+co2I%> T6a1FuXKPJx1|JjNhS~oBX8M|= literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/commandline/response/PeopleDatabaseResponse.class b/Lab5Core/build/classes/java/main/common/commandline/response/PeopleDatabaseResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..c956890a3cc41c3a41f13d5daf9264100048b1e9 GIT binary patch literal 1695 zcmbVMYflqd7=BJW(;3PDG6JsRrR$=$MX0*4UO<)#WhE)pSZqT4&v_-l^6%yjfHBN=K*EJEF5;4c zK?T2tp<|4fan}5%qEE%;Fp*c7zp7$D#Wf};R2)$;$>enfQwn|;=uM?l3#rAW{9z0pik;xiuve{;Z6>N_?NP<9nTcCw<&kC18g*mEsF}BY@q|EUHknK1 z=aTd36glbICGty|d~%lfV7XQl(9;i$$40_3>|!EYua@j087f1$Wcp4jD=>cdV4*{g z4Xa_+1TIHo2XrCLR8~!ao-`G^*eI`<)g@!aB8lSp&fF8Y8T~%{*ufIk)0Ki@<&0{H zgZPmo+bC1O&}7Lj)u#laZQ{+hNg*d7)$f<6{Elp?XdCrLmE82Vv5pZmR5a@gd=`Dt z*!Ru^)X4%JxR*dM$_7>oDrGmylLskzYGPljmN5!vD~)QwoGWqj2is5EC{K}wV?6(Z z8m5sHxb)*gt096L8ip{V;U^pwIOn`^www*;6aCxn(}=U}Y($)O_qnsh^qTXJ^Nv+) zb4EiS`US2!uL(S1rHXVcjsJ-gp@pONsDh5>dk z-_8Mf+i}*(yy=^}FZX8FZ0qm{JM8{?$N0PihW2aC|E(903s%LZrtck$%*q3^P^W7; z-a1e-mQkxsv`mJ7n_EYUgOlArtDO&(mSL>;4tLrqufh?c4~>YQzi7=>3lB0 zp<{g3#LMWwahxEllf<2-oxgAs;ynVN5nLlq;1sPPPZuP71V8)uF$6qmSeN1-A%BL% z_`n|gX_9EWDEz{)Nl%AOD@VMEAZ1O6`0()$2*pP>psafsj@eCGpp#;2w02Q`pn3wd zYB=lF!xUE(#5s}%5T!^l#Qppdv~xvr{2i2UQ|tBI?WQLC?o^>Jyw(SE|2Z@*dAFwZ9)f|^ms2zO>}3MHq)$ literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/commandline/response/Response.class b/Lab5Core/build/classes/java/main/common/commandline/response/Response.class new file mode 100644 index 0000000000000000000000000000000000000000..4f5dd76ef0e599404b83b71bb58ce8ab0dd17064 GIT binary patch literal 193 zcmYL@F%H5o5Cr!^h#?4xf+tWwgBv<}Di9KRfe9zekz*q#Q1CPg9>Ajz4gyi!?P@i; zz31!x0IZ+twPRpVV#_2U7FZ?BxyfKyu;{!Km?;2iq zBw<$iy7o?XqTIt#~2!td~FTP1BAw|D) I$l^{Q-WDt}$N&HU literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/data/Color.class b/Lab5Core/build/classes/java/main/common/data/Color.class new file mode 100644 index 0000000000000000000000000000000000000000..96a17b5f368686e15345cb7b4bbd4b8a5f96ca1e GIT binary patch literal 1018 zcmZuvU2hUm5Iq+bc3BpLg;tC8yUIsx5v9IBnj)dbxPhdr7~<1HSKMaVP59`8ze;Ih zjYiXFf0S|Vg;*-=CU-J-&di)MbASK&{tG}E&m)kKQ;|nO#+r<66>&V~$Bu%8O2HkD z*j1o&TU3zZ_KA#=jHe8t7e=lAnjvNM{K3HYipSR2D%O41A66K`t)p7=WrM?xTJM?+ z@>aWMylt2a>G!KMPAzw0j~Lc-`PB%i?jPF>*9^zAo0CD;9=@@*A&UcYFLhmO~;B)1M4`_MyX7 zt76u>T(5>SU*VdDXDBlymo}mygFOv*a92YDNewzbQb;nyF9*g6(SF3mf6Zx;J=gcB zZ911<(9r6h*u61P+gqGU-L*!eMXCQ*akW|HphQn94q7UtgAGm%AWQ6oC4xXA!`0E7 zl@P%?t`qtOdH2ckPo08&Mc@L#&*U*|&>0pnh42~Noa4&~h+9>c3f~aAfW+~EEBH;i z(Pk*z!fg?!nGuS2EFnlgAQ!eb&k_D2!i()L(`DS_)QKc-@c;_8=$sL^NeKUHKOl8< zId~4`3=!d|l5nEJ(L%zBg?|z*IHh;hk*0{6ozN69^9+m=nCaC;$p~UlNpTceY8aR| Le~3qf3n2R!P-M;h literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/data/Coordinates.class b/Lab5Core/build/classes/java/main/common/data/Coordinates.class new file mode 100644 index 0000000000000000000000000000000000000000..95a2996ee1a68e5e5d8f24fb5d4756ce4a120e51 GIT binary patch literal 3041 zcmai0=~EMT7=AX_hOj`00%Gx~&=LZeR&6~HD{@pUs0B*JUM|TBi(wa&jRkw(r(ZkM z&iJ){aeBSMaK=UW;+K6#9JvkTX4od1T})8-sz%Di&n3D1#{vmSlBBuyV3pmX)Q#j$u14 zMzJFERT=V86l8XyD9U_I1YcLNs$xyWbp^^QzcGGm3YsUD^lN%Lr&|l@v7D_t0}9%w zik4$88?$D?oX;6UmSsD-W7<|h!D09PYI=1!m!3DRY+B#EP3u{G#WC`Q^o8Zz8KTat ztr$bz8BxR6^jy(U@rHuLux;nFrlmW^oc}<9Hf~u)emJKW3I-MRPGs!mW!p-x==p+? zPy6o*T@T6L_r-n z(0*gaR?v}rD1Og4HQ3Igktg(m;aqU#86nwF-L_;;jWC613tvWzt3^FW`&*I~kIv06 z85w7w=OV*Q<%tKcC@H+Vm;|b;yNlVez%)@1&FI#spmMpW7ZyEll9JeYerkMjl&D-s z@L6w3AF@!>^C%>t0hpR=w)4U5pY2!8P(N}j`j(D*<^%Dv4TjCHdA?i;{ z^EcK}_dQ<(T%{5B^^po+?cVeiE6PVbNhb&ijlPQY@>@s!?JA7H3S+fRV>JxW^DI;8 z13p^X-2-8<@4G6PmI_nCo2IaJ)DRB;P$j&xrtrzlU>qY0;Sotmyvw2XywF&|AhO9I z;)hp}*5w;L#0uNJawB!O=B1%G^T}3RU8~(zU;v$&w>nE zJI1&Qxf#+5RgM0QMitLC{exB&r}-CUe~|9%(>cmn+!7WZ)p4!#%0@u=lxoEQMcTLz zbCV!ag?;gX?9$QR21@qqTHt^%KLyKrt){fH+6~-QYOh?uzl_>S`w`# zw28GP>`1hG>v#z}6OV9RLPvF?c~0?~OVTqlKE$7(DIfnJ@x`NcDanWucGdQ(2Ty7-^XvT!;7{&t0;s;Ykoh4nHjE+SAhJQpy zB1WU(vp>ps?xhJsp-b+`bIx#`$)www~tkfaQj5TQw7f$u54G!Tcy>vFU!@n)y)ltfl57SHUmGm zXNPvK7_|Mc^&!uotd(AGnAI9XqPSkJnhfgJx>>H6)m3u6FkhKfB2Dd>mF<$nF!<(@ zJo2IKwVeZo;jD2PM=Az;4nuFn^_^|KvMinzS_j={)Q_U%JE=h=QEXN4`- zZ{&?jN~SA8-S&3umdmq5sU+WSQpWWEX&B^!>$~AHb#XzJva!P;h3{SJA!)e{-wxX? z$`sG?fLf?~(dDJC)Fr>&ELas&U2S{u1A}gIECqF@Yr=w{b^D1_L?<`7y+gVSbEYfR=wYLN1UYBOL!oq4n0iz$X!z ztkKoe=I*{z4@u}^_mqmBeQ*%LBkI_R-#i4Ia$P41xA rswo}xTSs7A=IK;MX)d6dq@dA6dq|>Ae=aGQBrg_8oxwfg#Bl#F)>-Jr literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/data/Location.class b/Lab5Core/build/classes/java/main/common/data/Location.class new file mode 100644 index 0000000000000000000000000000000000000000..69aefe6c62771c3059bb5f004c5bbc2c421fed3d GIT binary patch literal 4706 zcmbVPiF*`h8UIbPyR+F$$g+hc3&?$JHi1=3OUotXvY`p3BqCr{Cc8s2Fgug%&LW`I z)_T-xJ?lZeui`;3Tb7h+Z9PD1z3=Q;;S-zL>Qe@@ii4+SMd!6$|<%!w$p3_Y-iZ^DhSzn!BCJG zI>N}OcH9Z0NK5l($<^%~m8Wg=b!gmh5Bc3; zZ;gJJwIkky&R03{by}3}oUIg3Q)%Il?(=-b85xDr1JxNhh0=Rv7BQyEx<%hyW!)WP z$Bmr3y_4q@TG1HgU`s)Z_;j5QgP3QEHz8CBA6k{u?SA3S;e=kA@Z&`T#q#|J28a8} zo8w5)D3vW&LDM=yt!W+c6%M#YUB}1NJlc`EWyBn}b+=rk^A0w6BG9s7rPm9JU}DGI zA=$OvKW#eM5rgQl%rkPD=!lIt zRZMGm2A4EEi*L89_)Z+pY4|Rlm))mSyrAKG_`ZTgbETDrH{+0oy%<#S10ndKhTAcu z;<8MxXc)#m4R>I_hS$r%AK}LuUc^r{90mQlWM*OMDVtVa@};#Jf%K`J8eYOr4FH1+%4lm7sJd@z$wfLIn1MDHX3v@Zmy3>PvOJRF`J}<0=MKoT_H2 zzcA^tSQ6<+V)!L~#hTYxII5}D0L@xTW#+3E4To!0HmpxhS`@UhS^~~ z>_9LeW;V_tzky>_qd~cnem&!OAg$WtQlo$C}S-S_E?btaWv zwye^CSu8R4HwPNdIJJFVra_J6eWT#^M&jA_`>J0jXSx1_P7e&oPCV~v zIqD2K_IQu!vd{}V-XRN)$;nY?&~~fq9z}$(GVHv9O^v9j27ML|f~;hmmy_=`w+F7h zy?6d?6~EQ+JN!u!_s<$`11(!qx7oB$Iwy?mkX{(e>nv{iF+E4@F*jNZ^_hyl^0par zoD=0q1=^r(8^vBrFO>{B<)ubr1Acy)yiK?BmQh;g69#ug<9nyU=Bo(3>ivIh`XU=e z&1T%_tYEiSx2zGlV}zm@HlBe)d{d6X9#r#rZH2+bS;OEVXtWENaNbEfqILYbBe z2xk(J3s9f*nC+A^i153fLN}lV8?gXs+<;D`kijnQXg(*r2D>>^C}mF|oU2E z$w5ZqhY0t1CkN^rr3;$4w=%S+vwGZiZN#@L2RvU@zk6Ly~DADkOdK znhHxiAqr1G{F$U2UUY%9F)oR;HJ1vsuC2w94~c+vmV)G*uxOr1oNOQt*NFM>s1frW5DDQx@7f<8N_SnB)*eQ_cLT0!zYl6WCXW$nED=zd(=K2BDJtY0!S(t z!Dx+-54uQZEunwCd?cww`PboKjZamdl}w)Np+Vd{TCLfcw>8e+rN=i@h1MFyl~|q9GH76d&$DE*jZ1sMiu-hR-wzI6f7zz@-7b8 z{FAFuvN;^zz9Y0#d^3$@JzIst5KSCqqfv-Opmh;fq+A zSXIGlF}s2_iM9SXS;4x*dVkze!G^>}f1F~MNb^%c=gh40^Txk1cKc?<_poT1f!rHu zl7y=zBXF!BGk3^*1}%YK!Z=QnCY*rf^#$+tYa>gW%`q^EDg2RJF;0Jvzu*r9(px!S ZMJwONb~oORcX*?F@lM6%?vgsF1;RUat4kOrGK8nO>gd<=K7?^I3lM&XLbt z`JC*{JexOkWZ_yTo@wa%L9A` zUl}6i%R^Mb%cZ(PK39dPQrcX+JVb7V>k5%a+6?)4<>Ql&U-hmxc!Owmt$a4ZQrst0 zzkC+R=Q{aplF#+>*({#{`P?Aj8x6k6PuI{#Uj771{-k_v_VO)Wj(T~Emj}H(ZHi~& zTN1IA$z&=U&Bjy74AY{XTcbOoJ6m^-BwDw`lS8f1d~fUKkwkwwn#{yw$!r@_MSO@U zXyIEE(d4$)o>X!h+Fi-$2u2Dydit_y=zzW}P9Z)z6dldR(is_NEtKfrH5yx~+Q8}F z5lxK63{EixdNF|RVKTdu$ymBQ5zS;`m_TFCU}|I}m24f2rZcg0tHxy-9ZV1x7)+(o zL-AxZD@oedF2+{f=jh2 zg<>Gja4f!UILlP$uv~XC8`~C3qx<|*m<|@}OvFaix_FcEL?ViXt;AksgKuN1T4RaM zt9AZ#Y8BxysDBh@9ZjXP-5my}nQAuZdS29`=|q(vACo=Qjk+;b7_O45jMn1 zm=+)}eSwWDwVx9P(E%(Z95|YYXLrdOX&=zi;qK{OkPq8dx2LRHeuRZKcIpUDps1g~ z^2#VoGi@eo09i|E2gb83o{VQ#FjX#Eya`*OJv9WMsp*L)W4&V|TVm;cSs2+I;wqb> z>A2K&qboZchY9M7gm1u(utYziwx-%@dP5ZtllOdFzU?0Uq9qHyII8^sd9ptJIRXf27hn&{|D#%@9X4ohz z%G-v(>I366Ljd*8{1z9kVqL_+umgeWb?#PCq8O;$4!asq+uxXGm*DIk$aG^t#9npI z6|>AG%T`}EU^Lk&h6Xtt%?zucjtDP1cEiT*b)7IY zXiqwp8B5@hskE$VG}@+fH!4e+jYSrzYAjAI0*%fY`Wg$9F(JTlzWEw${h(1crNa3% zP5`|^iRj3dp(qB|A*k^pBznbeWe3c1u}gBBsWL9a*vkeJ`n>b?#kWDnu{2_9ze9+2 zI7dsnrG*@O%Zhe@)?h`O!p2jreK8!5iTE9Y#U}UnrN+{Ov97orpaBKHK(bY)CW~j< ztaW25l`Z5)&8G&h92|^gGO4tjQW#Z5^JzsZw8px-x;uM1OnQJGH0fr##o$kwd?)WV zX^@6YzKcdpN)fC%Q*Zr}oWrCTZ8iCBN}4o6NgSiXeve668iTcM?=b03f$gC^Cf$P% z@1^@p`V2mNFYPnw^R$m?o>)dD3v#4xNX3y!raN~I#zs{RbDsEQLp;+k5>0Q94K*ZF z$t6i38@7yPrCDg1%JVRt z$i0q159SW%`3_FrmpcOPH_>{0@&S~V+{p(t;%Ts993UXlQg{LiLzCP%H1_58i!=zg zv_qSvyl=BE2XuLZmi826Krzhbh>SS7cXFRdDTX7I7TiK@O{8cheVbl3`SZNb;0MIx z9yIwOe%RnINaYcezsO%gRwsyurRPzTzs!$8)++3)Og0@IT^Gv^r-m{$9)3K?Pt>@n zJxD({`AL4t;IEkcH19`SSCF5nar0M${H)1e!@`G z`5V%+9}>TbdUudtLD3Q9Z=vPeAg>PccSOoF2u;p&RD}hT{)~QP(kt{WlYS`F>vYJZ z@6bV$UKJ-A$9!pm4x4m@j+%6gj+^x7a2}dfFpr9=tH$DqAxX*nO7f!k&~lRx@~iTB z4d-Y}gY2W_$TC_Q9NPp9HE3`gY-sVdG^is1bX7}(y`Q@~P!F^;*c%5m2y<)>)osUo z)OfK;{~~kvI(~Zil+@ zOy|g`+^v!JAg}b|G}$B%GRS%ovE;VwFfO~u);C*#jv|wHq{gf}?~FwqPHj~)PFUfC zMiATuO$&zVN~EGlrs@}UIoYgM%>_lkg%_>5q8o}0@u+JV(^BWPKzTshjgFMWPM94{ z8s+EL`4HY-oC3Um%OzIb#jKT@I=WvH zhfG&Iox$Q=;G9BXo^8|Wj(j|pR6xrH*Ej`CwWHFrREcS&FFtM3Ywsa>P@X{c=QO3= z=P-`lB-Uv@mGI(i)h5rihnZTYVS$|`np(lh4kB3C)-!-RVwp9{5zBj>0(GM8+*CT~ zc;LOUB<_SuoYS@)z%gyrq|ZhuR)n|xYg)X)M@>G)Z{qmk6Y_b>r2jy^K>tQR$H`QP z0P*CG)OI|xTGtok7}2fKLF^LjuK=Ec?3%&vAPV)QQrpLnT7TeFT?3(4KYRWs_a3z1!aX?Y^Jo~5~JG!D7WEf zc#skR<4$8S;SMwvkO2Vq9Nkfm+78gS-#|NU5uZXEZa$|#+zkY7L{o)-8XdSGP3`y` zI&fctTJu5S;s(e=s69(=P(-~=hl!hBqY8iYrq`+B2vv@g3w8H6d747raq^+!AE!W5 zEj@OG%yFt}3RRC&4Vr`FREr`sPIV~i$7#l^*7P67_W}ywyPjOMf$Hg6nnN35?><^Y z{d6&1M_1A&x{9u+F4|1%Xn?)|w5c?rN9c>FF|_>>Rf@K}8rpi%wp+Aqevhh-)69X; ztiv?>troi$mRi_tSI@Gl9=ke6s?f4{o=0e|%rk62_ofz^Wf&8$Z3=s2PR$c^cGHpx zn%5L|P0)OqTqVimE~hGdlLF@qjA=n0E>(x9gd`U+81bu~Q={uYsH=@>nw{NBA*x)^(wI|${KCi3d^$RTGqJ} z-`y0XyJ$Au4GZ4`x7kA%(q6dDy_OYcssZy>TuNVq)8OJD_h+rvOr5=BhNL9`6QawgH zXFs+|e$$kW_&7#<0#kgF&Z4IrBhJZ>I7dedJ>ppy3oinC#4UQnu#8xP5kna9+@SY4 znW1dY((#_dc+X>YFTkWPI>rm<#|!J&qsN<#kq*$ydc1e6kVv#IbY8IPO==vdY&t}) zz5y2sU*CWmg{N=8gQBW$z(7&cH{eB4+cyxD);g5ZJY#|ufRrwf=O3YksQFZF(GgmV znqSqL5Qpca^*X4Pk^T1(#%T5=F8p`1po;mdS2Zo6Z2lADPqpQ#WtwVg zK1$0gabdT0R`C(*M(<(k{tzSoh}!6V>ZFs1njat{{upP^Zy~V!HUi1Jjujituh=Mk zQ#(B#0`$yUQA%8w6>$|z%G_0!84o#S zm}itSuPw{`2ED17BRYC`Bzm|cRH%)lyrjvwlc+OOg%CeZgOW!Ler}j+csDz5?`}Biya_Y`hj>^9noAteNavaIgsqHLhy4VK~ zdrD444(l@mC-C;>rkBX=dZqatTJaRQD_?1Tn^vrAX_}y`tSX4Bdt2~{xR$&}fw1dc zsy#sF5=mcH+K5#VHz2Db9?6vgVGm-^0jdhS!yX5yJz@aV9`S|^0eLmZ2zwo%j))JS zj)*_(6Odnnd||%>)ENl?)EP0u0RfpB1j+&Gic|sA6{!wa38-3ws>0O{(CSDHK&vCc zaE*Y18dMVwIzVe8wE(S&gu=A~3TaSnIOG6zN9q9Tj?{Vs&Kh z^fBc?8AuI(MU$Yskor^l9Z)`coPI*T3(Aj2+;Pw+kxjpW_ubzEWzx^EL4O}q6@7@@ z{trM^Bjj(VKLl079%L$i1S-f2kX`>2R4q5-Z2TFh5U)iR{>Px|cms0sKLJ&5rH>;t z&+z`5s*yf^L^BQgQ~dYxM>JcJzW-kmM!^HN@@`s+QVwIcxOL%#blP17Bm2k#6xJ5I zv%G36F_lk1hzT*j47M$EEw{G9++f=WX-+E^odI8%S}jj`*xD>>bU8 z)L3<`iTJH9f4&PlN_BNd0#+9`ljcHpgs!>e9rg}o678^+^b7h6`b!whP5(}R1*!rr z_RsX!FlHs42S@uGP%hkOj?&+Paw83ShW-we2g&HY^!K0)B*??`51_nAr`FLwg7P79 zUQGW4%8vz^1&QLYNF*yNDfBTKTyQI9xDx*U@M8>Bs8>kC407858{;Z&(lCz$RzQ}v zYOqlZF5t^_XcoCWS$YDT|8ME+vTjyW`!u7k9Aja`X}dMMe;W3Jgi|53kihgp3UW>Z z(xS{$iYiDuJq`llZunh}+NHR{RDdG7^Eh2IaF}{R>n899fg@{z)`vDIx*bL6T19tA z`$k1~3f-sZRYLbGx(h|$0sP>|AW~|3q5_{TKbxD*xMh1FJ>L zuTcLVpoe4hzw~PyF+>qWfH;0`#jd{%Wg6u!ly{)qjq)y(dr{tt@_v+`#orDe=ePL{ z3iCzaAEf|aj6XTPgfHdGG__Py5pLsUy6tLSX;Beg#qGMSgF7{~I?uZXf0?4>t>tSp L)sydC$G!gt2-=Sj literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/parser/Adapters$ColorAdapter.class b/Lab5Core/build/classes/java/main/common/parser/Adapters$ColorAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..c627f25572a324d8d9d8dbf44e3824d11f36b2fe GIT binary patch literal 2034 zcmb7F-BTM?6#rfFv1Gf*M=4sZy4X?(A6>OpX+abzXf=>ZfEIDaxrCK&-Rx#I8-|WE zTFN-}q59~b;Db*QEWk`-1mf?;u#QM?;4DktjMQ3Qu7?wU$E-dTL9A7rc(vh+A++5&}A@-p$?%py= z49bLU+Rpe2FS@!z+iRAkI};`^m2^7o$>i-q!M3y_cS^dWg}BnWsMiQXs%#Yqaf_P_ zy?vS6e2r@+w^p^B>loJRNV?9m!d>SN%xVu&_v1Rj8%)fWrs?;5CGP- z^@6D_8`g@(Ez5SfP@?f#QA^s*f*BTWG{P5_ra_8hR2w;Gmz}&mWrz!Gsn`92kfY!v zIwedg_z)i{xQ34z+Mh~N!Y2wcn3gc3AdBk^zj!};Ti&*RPxXHD9(omTSM4dO-hsER z`Ws%=tNQn9=l+KHJU*5 z5{wA{B*R1hfwwD&ynWT%C7OzVpEd{Nv#kn*N{9Oa@V;On#~+D7W@vk|@CrV~tc09` zIm}B~P;dj?5^gG3#Am{|q~JVyk9pQgtl$h@W;pu{t;{ea;y&|zQi~qxJnX@`hO%pz zS}=Qbhw<5LcJ8p>BS&=ECtQ2JSfsh*B|_F4F^Y*cV%Rtgr^Ac_;5-GJDqHzr2&jK_ zt6a!BGi8%T@=~<5>wR}5JQ(+5y*^3Kq$_d>xjQ9SFVIt?J2aT5YJF_j+I5<5mnd~E z9Fl9?EQ^Put1rFOptI|gf#Pw;;dcnz?AkR=;_X<9Oh|(vJj}hT@omzqT%DX6pU=#F zF_Fz=XX_VqTqy}H3f*5aj5a9Ee``2SLkV~GHMkjc(<|LUZ$6L!DL^NEpQ4>cD-+iK zU9ey2M-#f}I~f?i#`E-BsR8f;UZNcntxG83{1f3~v|bt5Leman9q~OR{z80u@Ne{P zA=x1%574|A8^|rvNotRtkj2CnPULo=+@Q5GSRwCN5V4Dd0pFkv-;%hy^ar$oVQdBp z)LN8K0mZ{Bc$Jj2p&u%x)`Zu{w;Ajah9#WEIoiePyoWwCfT7yUv}>Z1#J~<(MBr$u z-v@!ZYJkH)2@2FrZij?z<3!jO5?-WL5T^PEDCr$M_ateweyNZ&N_D0&RqGDg{udRM YCmrO|kAYwv#EZ1bq`aN}v`-`TFX?wJ=Kufz literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/parser/Adapters$CoordinateYAdapter.class b/Lab5Core/build/classes/java/main/common/parser/Adapters$CoordinateYAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..5a2dea9546a38c5736573ad2f06f5c0a5518c4ae GIT binary patch literal 1921 zcmb7E-&5RF6#g!|OV}k)pn$)sOWqw!&ghKKzS54sjuiC4C!do4$8r2_5+K-p(1+ySd+s^k`OdHV=ik2`0vJV6!5cYr z;aU!DxUOJCuA}Kc3P2V&FxG-`1rs^k#H}1AF(t3xRB$_oPTW!OmRzS5yscnHpn1x& zE$_BKYGCkzKzhbmF$K;PEZbbDRhCWnzOh`Uq^sbRjPe7+wd6S#roD$&m3K3af{S0r&4ijea&#IrmM$#)xPI#Ck3)KyF$H(Mp>YL zpzz38H}tY$uj)n5wd~c&!Gvh8>=+(xnq9M6D|-TBjvpysNGL_I%sFnw@Mbqk=9*_Y zHjTu(4DC65fwrP&ls>;}tc9U6$pX1!!>WRJ1eC@UBR)xnF=>I$gr_6gmy_WwE%b+m1?fRi;Ovw{ZbgoJF^aSupG8PZHTM;VRz6dkW@NypInAe(-suoZkG73%)J zU)Kn*?LUA14UL!5%YN{f7?cO! z(S1&!<0O=*0tyO}{#^wNDi(21#fSKalX9XL=267}22Yts30H9ruL=w{PGW;85Ez!w z|GCBjXHTdccPeWd4qV7hpeNaEN3+DjDeFeLW-fjv&^<7hY~7O3JcZ+qsdd=h#G=9Ad5oXQdN(-<7+HHk=0Qw>;unrPtD zQ*#=I=q;WTg({;<5{MIk3w#i}__P8UkPN!{@8L=3Dx`F14^2qpU!F*+N^FeZ3&E2K0^jSOvG!+BE4a<4JM zl%x{Vl)H<#L=Wv4jP?3>--;Bcv;Qw-nl9lo1!=0h&W|k}M|G2@Cf;Q7yHK~eNv7mZ z=)X5oIQEsHuOXTp19nUkFdqYsaFu}Bq5SV?+eQ1oL6dpT#-K^4bB&?S?4sj;K`}#D V!gz*pHC%PP%r!^mo%~)x_8-D|`2hd` literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/parser/Adapters$CountryAdapter.class b/Lab5Core/build/classes/java/main/common/parser/Adapters$CountryAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..a585e91433468b2cc62cf8ae129dceff3447351f GIT binary patch literal 2067 zcmb7FT~pjt7=8i^VYi`B3fOAZprtHdjasX;Ac_>Uy0Dc63gV0tmPk`~vpd-=19!F^ z?G1j8#aIk)U|h)FjNuI4k})CHw`EMq zxFMl=%(P5rTtZ{Ke^EkYGPh<(XiJ!uF88uq-tnxUj4kxT2DMcp>VJ`hHnJ7z(` z>B(Hta_p^%H9hYbwgly-Wf}HlMlTc$>iZJuTsE7tw7hN?3|kBA3KwhrMkPdxR+ct* z^o)f5c;c?Up=%l4TGvvJZCdN2{Z*tj-O;tcoqp1WVE7+%339qZO+wdWTw7C)p8j-3 z&-*#Co)ThHn`tBOm^rH;V~QYQPC+U)1p4cRz7*!4T)k_g9r8cn7>Jm3%3QZ}r)aax zOTNLTwwcXntERQ4>6VpqbiqZ_E9EU{OW90N!m$uuP@=kNj7KJtKcTylW?|9qB7oBkid+LSp`YllCb0cJ<42#H5++g8cF2 znbU6Z;5&pgbm7pvp=XNXPB|CvU#UClRZySvgl+3vv~F>76;`~A;wzy;Q|DYBXWw1F zqr4q&OifQLB<4S!OfJmM&n;J*RLhoR^Md;)62|J3=kY9RVVHDhyiRw}!)v^QKLwx( zWPnb-ySUT1NiG@zUBW?#6Cr}(W@3~&z5a3_fYrj>C1fp(2tuMd{du#3iy z$Ud6>KxAgpFttogbf34%a#I?SebYqaAV zlKYl_sP8a>?|lYpB}%}6@$ej;CzEyzKxJwTc!9nxkp9Mqj2Cf{y9o8Ye0U54w%538 zpr&bX7p)?2IMpBhK;0FC<3LRe)I+yp!1f6O#sk1BTm@isV30}g;`F1S;rc}b&@j}6 h`cQ4VX#ZbOEKk3m&j1GfbqG&$jgk2o{?*ST`Y$)kK~Dex literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/parser/Adapters$HeightAdapter.class b/Lab5Core/build/classes/java/main/common/parser/Adapters$HeightAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..4fec1a67b9d2ce0b81f42d26780037fc0a3003d1 GIT binary patch literal 1854 zcmb7EOK%%h7(F+!J+U)s9&G}YLS1lM$8I}?hDS*n8bXu0b&?9Bl#12F8JsEh*qRwf zVMoh?N<=K#A+clYR*DmmCa|m2)y)4vh;!|6G6pYTF>~+z9_KsX8*tu^H1c-C2SD z^yI2QWWKs?2n^><%UG^g)(rb|eXUH%SiV}+%d5I=%5xx$xErP;Fm&56OB?Rox?Xb) zTR_cOmSNAAb;mKNzK}0gE0wCH)pXl2Y%Q>JQeAG-0`a<4p~;3`7Py$sKh!sMt*l!m zt>D_GRhpg*iE@@}lnk3*G23wJWmiDt_>tWx`3WtUWY}Zda0lh?Oar zB};efHq%>eL2YSUm9n;GTI-r_Syfk;iD`Pf1&;Pbr5u!bCKNfK6Owee%(5nlLbYxe zjRjNod#KZ;E3!xe6TN$=ViaR4=J1KY+2eBdEW3(%e5&AYjLk%M$lLcal?d%;RV#1qNF8io^uQ!vod1HM|ze zre3ZaD_^mX>0Ed~JN@rY!;FKhaE`Co2wy=U3U&x%{Ga4W<0_;yvx~l`-1OlT z|FM>E9^>4rZ39f;HJ*fQ8LgzVN4p5uo7oqLibi%1{WpHa;PNPb+C#K)=4YgyAvUH& z4>0hcKU;VZX=@5i#P4^Eq$N>fe0EO|t-lpNg9LFGcwVID4s}b^-enSb@>nK^6+YK}6n@BXc2^Z;pi@-$N;3!y>!P0a)0vwqm;A8-JjjIHVXR?1_unF~_ ppyA5L1JE$k>E2L7O`P~&P%KfVl}{FzTI*%J$~8ge!~9-B{BL^;;3xn9 literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/parser/Adapters$LocalDateAdapter.class b/Lab5Core/build/classes/java/main/common/parser/Adapters$LocalDateAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..8d44bb99a6505c8a750814418e5fe53ce827dde1 GIT binary patch literal 1941 zcmb7E-%}e^6#g!REJ>Gw)S}j^3#F8hwyU;km59awiiW~Wu(snv=MuKCHM<*kHywP^ z)`$Ag@jvi?NHgWf*aANH>Fz(&@!ZWOYyx%aWU}YpbIQ@k3NELh;?L#k$5WVOL7iZPfJjB9DVggw_iHYt zdNTyu)Hkh)zG~WQI=5}d=Q25+H?P6dZ(5b8)VZUX9?NEiDw8fbHMeZcoATlZT6c9> zmP*BI7*>(TR}2@z+J%Y#XRQ?!RLo+I;Sceb*wTXE#S>8%PsM(4KX{~xgWxx@CHBQ* zl6A2|tA?lt59sK;r-_CZJP^C$Kx^OiMNRAm_r(DjJ`Em;9m3lZ&ouJfBfp2V*&~N7 z0v7u+*t5{^Az_m~_>)l6)U$^d-z=|!c@tykgHYT$13ge3dOSVQ;h>lc6shE(Sf`PK6EbmW-ckhFvyVP1V(_ zof-V%`G!T$f#K2^M;&WA`ZCR)Pw5%lq7E53J~f*A*}3`r_r;alv-uUe@MhII-RaG# zO0YW&xj55kynl=}YUeC;!VrtG!#n9}!1-|Y!@Irhiwz`(`}+2fyw#g6-AXi|l(y0T1Ic;_k)YVU^pgRG zk)W?eno$B7!#g+^2Gi&~NdeB1rbj|YVdd&wyhk`1X^GyPLYgsJCrEdW{?z{wtsF_| z+n;S9wT*P0*73A5VWg3!O&hD~n#fnXoV9qK!Jec)JjE7OoIb+T)8F|Z@GPvWo z0hjy+ujt?#kL^-i>+s$b_gZd|2x`uq^$O-~ODf**N2vi>AVbUkI%+tGMveM^Rl%T! zYq-wficexQ{HTj9v7(Dju`O1`O1P+tFX2+S7{1rV_wa4FK-(p;*{6&3a6x=0)JFJT ztc7pIirCb}8hI~=@93~4)+G-ibh?yu8)RRW_V9y#)>j#tcAHR9j7G_!sZel3!%a|a z2}Gr(8cw23Lo3=CI`*$EIU@}HGR8lP&Tx1)r=9jw>n(rGE(i0`#6PXhYu*n`n=VX` z=D4}iBg-}J(*y>Tw8?EMq(WP5rgv19pjQmT`wZ{1M7yhJteR#Br|E4r&~pY3fXU9% zzllx;txQ^b){y!_n-mVwzcw;HLzebh1%Sh7p%atB5=uH3374YvWbZ0!KBMg`(%A#) zEz~}#$tt;3)IG{7%e~8lsEJs!NYnl~6uiJuyhJTmH}MDpn^6Pjc8YqMn@VK z(V0S*g6z>R>Nuu1QlPj=fX=bJYum14 z6uIY{o)P2xwm%XF7}E2OO`sWGVCd)^o8>RKQQ*$BkqbP_nI7oc8)9HDq`*B`hQ?gL z^Ky)%gX=0r? zO5s~sf`F@1M_HGQl7`|X84ur+9F?Kz_Ze0UXGj&}=2CD=!)=f~Rj5i=XgGso8jj)^ zHO>C^{Ml*@y|UInpB+QME9p)I@7^Sbbm%`rM>b4)20`uM>nFSa?+M-JfuDj zNVmyt+DnDCHcYHV33|>jxX%@MR@F4MomxvXfOB-y8|mW!)Pu?Xpl1`U3>uk?cCRDx znI;Jwre{MGoI{4@S_Ob+w9<-6ZwV!nZNepJY|E~pt||2qr&f^6)YtEzVWKXZn@DDq z+!|6(GD<01B3xa>ok5c34t<(joJA4m;YD>?D_n6MV#RTspn4~xOm-fpXp*GBY5LPC z$0GV^B}F8n64mlwR?#MQX%jK+E?d(uv7L?CuF@#k(%so_NUuSax~oa6JxRx;)l^6S eN_F7BsK_imDt(R&k`gYUg+`TjD-Yxd(mw$+znY8y literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/parser/Adapters.class b/Lab5Core/build/classes/java/main/common/parser/Adapters.class new file mode 100644 index 0000000000000000000000000000000000000000..9c88fc4e1ebf16b3c60f9850aa8feb697ecb5b0f GIT binary patch literal 1680 zcmZ`(Yg5}s6g>+DS+)Sk&Z3PK{-(7I_$g;9wzw#3MyGyNm| zAH^T&G&B7H`B9yoRcv8H?3vZ>z4z>W?LB_=-#`BX_zVXb8wnGM%FdVY@C6Ugg95FUEI6S>U< z`n^ET3|daRLUmuusFiB1ylXc0E9FL2;F|fu`Q0f+UdJsZ;D^kA0Nbb<>l;i%7>uk3 zem8RbXwPY%xRY$!pHvQzx^3Dl>x$V5I-S5T9XgRyifg35xpUO6)!1pu$fLNpT|_1c zTIDS!n17vM+wqS|^(gfGBVuv`Z`diK8hL&C<@#d?R`=?tL$4Y8ij=6k_`+TK%wBnbu4_>&fNZ{6+y{}wk%ko&)yn>+VXar}Ey4@6njGPULZ$ZPGVzLgxW_-a966<8QO+1oi@1qp za%_d?3EZO0af|hww0OUR4-@+g?H>)vA5*?NbiYKILl)oT5XC-)9Bq2|f>MdQ;68Qd z4C1fY{3XBBu`-9Rc-CG6@HHM#O5=`mWWM4vS&Sus8%o%2Tn3JIdWT@+y;x~^hu3{e7aDy2yV~Mq|Q9priaE1E=D731? gsl=(osl2HYtzv;|k!y+TEv~n@-r;(e>piId18B~e-2eap literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/parser/ConnectionProperties.class b/Lab5Core/build/classes/java/main/common/parser/ConnectionProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..71b4f312ab5f9fa750ec4b1ad3e85df9db4974c4 GIT binary patch literal 3794 zcmb_f`+F2u8Ga{hn9VQ*vLPV}E!|Q|laOQ!1WFBBO)NHLNsvG=^*Y&1!qUymc6OG8 zYAu&qR4CP|wJp|Ktl|YV+;$T-gnC75wX@Y9^j}dPAKx=Gn@rN6K2QB2voq(rz2EzN z=X@t`{p;EcfOh;v!47B@xEq6EBotI)NPOsF3@aGH!7!3x917!c1u2Y%VJI+>mhps8 z)xxlZRz`*$Mpi)ths9$ojB&AkM8=Z}>V)3s#qSq{@G0^3MInA##!(r^WE@v;0?#P; z5}s9X5?@vj#a9&Eg|CXosW46}cn)Wl;dy*b#@B_H7i4@x#y1tT;adt?@uGNqTRdJ8 zHZO(ovW!<0Y!%{4oDJhUGG0~iAik^MHGEIT>k^c-Wu|q@PU;y6wedsRVJ()mld0IA z+4T+yOH<~^h;B(}2xy44q%jhUyE37*BWWb<4@p?k*wil})MXCo5>~{MhTfAM9n`IT z+F*(+k+_-AQvI5h6yN@0$Uc}Pg!S=+IXY?@v9xAobSu_n8it;*lcq5b(6SNTe#Fe! zhBiuvs~Vd;Tq%us`fQ7^1RhJzWK*^X=;k$Fy1dWU5|8iJ(k=jUDnX{#J*GtqX3#C6 z!gD}}5~>3}x(!<=9UU^xNeJ&qr2M=YP#Y37)p^QEGuD|M9@Z^=Xs;_FC^=!$+F*>O zV^-2$T>F44p|-^AYG$2v_dYzH(9?nq%0k0Q!Di*GcqhM!$!3*V*gi9BC3LYSp?)zM z+XN{pK7vja9|X%5KIk*5;`?|*#Y6b8gr}X?olDM)GgUlRJTBg%C9SA)-MJcdE*4KY z1upYz!kKceI9K^L(-L(ii^rTBv@8@)JNe=Xu1`muyihBibd@HBIW?jbPP>XH>Eb#K z&qPzAMMNYSKTz>QoM$y=*O+_SEtCBoaAN&G0DHf%Hf`S0F5^ckevF?;c+z>znJFGE z9*;6@ChFuwUM?lYf-ZlZEY$hL?Kr%+>M>tWXjz)+kzEM~-Vl#BRs0ga;`UW!{946t@LL(bQ*jf&m#}hS_A34$IDZdV z?-1bWRRSxj=PimDZ;8hrRlF^#_9t{o=$mCPNY(qRTB%xo^91-(@n_tSu-kd{e{6vH z-NTJiJjFx8$p`DmbGDRi;ILEi4mxExDvEe_9)rDuhd3Q1RLzml`+1Qwkdb*?LS2F{;wJh3zSVIJl@k{5Hvkyr2cj%&T2V{~WMaEBKsTSd~ad##>q zDkb5*#q0z4N&|*xGOhZxRF*+2n2$GWCA8h%!6L}TEY!!78JjRT*&gHRkTix(u4?JD zZVX9iy}iExVg5c9Q;b-8+}RtpO>f|GaZIxej$Y3ExpH)+v<$;m(!hO_EV1rRr=H6@pB6*BI@A}%C6U+8wtTxKvdWYY!LGQCJ7{EJOgVIv2ymq*eB;4;i4{FW%2yO{)bJ6Yc1QW3J z9(~LkAXRf5h=q;?y!f{lmzObdlOaEel$qggD8=%#KhnIS@!aJFY@ekiC4iP zN?o=rw|1zpyQv?Wcq8Az>v|a)#AStV4dQ;n-w-4ogq?hL@hiq(iNEE|c}N%eQihN6 zxzt@$@G#$1PXRmeF@9Cx5p;7!7!Oig7&lx(S!78Lpt{FR~35qLh~e+#W&uByQun$8*^BGfo2|%4Ri_eQ-RF{vV}m}QIBm{iwCd{+X?SM z{)f=v0;^>>0eFuKY%O&k#m5OoK&(XBEz}d@Ev%BUmyr8PtV(A|V2C<@FQ9TDj}@1R zcjY9iE~C7F$Uvkzk5#*xbEtXQqpLQD)#owBObV!@L4Bklhc#5VgFiXknZw!w?iwf{ zIuN-#hjo$a9PY_seIEDbu_4X`?~61}qG<}vWq1=Cchj`xKmn~ZX&Yc^V|m=))7p~5 zrq&!bQ=b%;N7@;dR2HyR=xod3fdGQ-3lI>XDk6QLY!V$8Nx~f*rSFg|kJf&YBYH(4 zsS&KCG=h6jO)6_i+G-55+T$epDK_GBSc4a+@gnZTD2Vz#TK*O5 z@i%O6%h1l=8D=~0!+ypcXF>W|kTUwI!2x`N2prNsfX7@^)A%GlMJ%F75rl4`O~$AH TiA+kyXZ|5N3!kN=44?Zq4?pto literal 0 HcmV?d00001 diff --git a/Lab5Core/build/classes/java/main/common/util/UtilFunctions.class b/Lab5Core/build/classes/java/main/common/util/UtilFunctions.class new file mode 100644 index 0000000000000000000000000000000000000000..622262366a0fa4ebcc5232694e6d0c15143bad7d GIT binary patch literal 2189 zcma)7*>W036g>@y5sMZtk}WHVELpNZicJ>DNeof!2w@>3lmx7-FC#oA;|w#ZVaAob z-e#7Fp8!zXfn zoJ1Z4IeePL9zK)9lO&$vb2;oMQN)3Ul7?p*4h7-`(>A?5foLXsDiGUuUK#>(71K7V ze(TI|>-w2R&-IGa(5+M5HKpBk#=IZRw!m_w;j~(go%21@%Dv!F^6iFaI(9oRkT7lU z#I5?4C9s*Pyw>07IZL;jxtiyib~B$1xyrU@G!2(oao1@3mM0*}{F1~g z9sJxd&gEG$$ySsl+e^m?%+x%+@zb$>uGq6&0!hoUn>}*tSCFePmWPNVfz&I@(fhaB zxFWG6gJot(ApO$uS-{?z_peATs%V*8BwK^`>t*ha$qe0k-_qOdq1qlWnLz8Ipt5Bd zP2GCxHvN`i50!H2jc)lY`?Nf>{>wR+*Fu>AyujkHEEw07#^PvjpqGmR2 z-Sb_7mJ0R9p-@ROh}`=h_X{GkL}qbnj_)>%lBv`>B*KSM3~9_^UPC#JBRm&a83?4R zL^GnMG%7gOP)*|mUr6Ii4PT{ELtPp#G@PdKHNKI?w;H~a^Y;R41Jp^i6? zh|wR#Z7eY_K?ZlQ%#pZw3vY8yaX;97hgK4iLk%ncAR?phVztjELZpDr)DyC)ii?#F z;*;3iBI+HoxlNQMp0PZ_W-Y`<-ExSH+#O~UBhEdn_t^|;qZNbN-0NU^5}Q@BStpw{ zg_6R?2%C)%o6EJ4yTfcE#JP{nKAS;p5{E%;Hakd8VzW&)56R|TqC8-2awBXqAvTw5 zBX@_{M2VB-OGlLGe9kf}u}$HmE~pwNP=nNFnolSNII9A7=-GvaN9y>y^l3^S+e#h@ m(v$L#qI^KQf;4+_m7e#yG~)dK(%1nXa5sVv>D^JQ-Twg81JghN literal 0 HcmV?d00001 diff --git a/Lab5Core/build/docs/javadoc/allclasses-frame.html b/Lab5Core/build/docs/javadoc/allclasses-frame.html new file mode 100644 index 0000000..03d1708 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/allclasses-frame.html @@ -0,0 +1,42 @@ + + + + + +All Classes (Lab5Core 2.0 API) + + + + +

All Classes

+ + + diff --git a/Lab5Core/build/docs/javadoc/allclasses-noframe.html b/Lab5Core/build/docs/javadoc/allclasses-noframe.html new file mode 100644 index 0000000..216ac53 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/allclasses-noframe.html @@ -0,0 +1,42 @@ + + + + + +All Classes (Lab5Core 2.0 API) + + + + +

All Classes

+ + + diff --git a/Lab5Core/build/docs/javadoc/common/collection/Database.DatabaseLoadFailedException.html b/Lab5Core/build/docs/javadoc/common/collection/Database.DatabaseLoadFailedException.html new file mode 100644 index 0000000..e962f5b --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/collection/Database.DatabaseLoadFailedException.html @@ -0,0 +1,319 @@ + + + + + +Database.DatabaseLoadFailedException (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.collection
+

Class Database.DatabaseLoadFailedException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • common.collection.Database.DatabaseLoadFailedException
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing interface:
    +
    Database
    +
    +
    +
    +
    public static class Database.DatabaseLoadFailedException
    +extends java.lang.Exception
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Summary

      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DatabaseLoadFailedException

        +
        public DatabaseLoadFailedException(java.lang.String message)
        +
      • +
      + + + +
        +
      • +

        DatabaseLoadFailedException

        +
        public DatabaseLoadFailedException(java.lang.String message,
        +                                   java.lang.String path)
        +
      • +
      + + + +
        +
      • +

        DatabaseLoadFailedException

        +
        public DatabaseLoadFailedException(java.lang.String message,
        +                                   java.lang.Throwable cause)
        +
      • +
      + + + +
        +
      • +

        DatabaseLoadFailedException

        +
        public DatabaseLoadFailedException(java.lang.String message,
        +                                   java.lang.String path,
        +                                   java.lang.Throwable cause)
        +
      • +
      + + + +
        +
      • +

        DatabaseLoadFailedException

        +
        public DatabaseLoadFailedException(java.lang.Throwable cause)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/collection/Database.DatabaseSaveFailedException.html b/Lab5Core/build/docs/javadoc/common/collection/Database.DatabaseSaveFailedException.html new file mode 100644 index 0000000..f52abaf --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/collection/Database.DatabaseSaveFailedException.html @@ -0,0 +1,319 @@ + + + + + +Database.DatabaseSaveFailedException (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.collection
+

Class Database.DatabaseSaveFailedException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • common.collection.Database.DatabaseSaveFailedException
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    Enclosing interface:
    +
    Database
    +
    +
    +
    +
    public static class Database.DatabaseSaveFailedException
    +extends java.lang.Exception
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Summary

      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DatabaseSaveFailedException

        +
        public DatabaseSaveFailedException(java.lang.String message)
        +
      • +
      + + + +
        +
      • +

        DatabaseSaveFailedException

        +
        public DatabaseSaveFailedException(java.lang.String message,
        +                                   java.lang.String path)
        +
      • +
      + + + +
        +
      • +

        DatabaseSaveFailedException

        +
        public DatabaseSaveFailedException(java.lang.String message,
        +                                   java.lang.Throwable cause)
        +
      • +
      + + + +
        +
      • +

        DatabaseSaveFailedException

        +
        public DatabaseSaveFailedException(java.lang.String message,
        +                                   java.lang.String path,
        +                                   java.lang.Throwable cause)
        +
      • +
      + + + +
        +
      • +

        DatabaseSaveFailedException

        +
        public DatabaseSaveFailedException(java.lang.Throwable cause)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/collection/Database.html b/Lab5Core/build/docs/javadoc/common/collection/Database.html new file mode 100644 index 0000000..3fece58 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/collection/Database.html @@ -0,0 +1,269 @@ + + + + + +Database (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.collection
+

Interface Database

+
+
+
+
    +
  • +
    +
    All Known Implementing Classes:
    +
    PeopleDatabase
    +
    +
    +
    +
    public interface Database
    +
    Интерфейс баз данных с методами load() и save()
    +
  • +
+
+
+ +
+
+ +
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/collection/PeopleDatabase.html b/Lab5Core/build/docs/javadoc/common/collection/PeopleDatabase.html new file mode 100644 index 0000000..8e53de7 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/collection/PeopleDatabase.html @@ -0,0 +1,363 @@ + + + + + +PeopleDatabase (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.collection
+

Class PeopleDatabase

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • common.collection.PeopleDatabase
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Database
    +
    +
    +
    +
    public class PeopleDatabase
    +extends java.lang.Object
    +implements Database
    +
    Класс базы данных людей, реализующий интерфейс Database
    +
    +
    See Also:
    +
    Database
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      PeopleDatabase(java.util.logging.Logger logger) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.Stringinfo() 
      voidload() +
      Метод, инициализирующий базу данных из файла, находящемся по пути, указанном в + переменной окружения ENV_VAR
      +
      voidsave() +
      Метод, сохраняющий базу данных в файл, находящемся по пути, указанном в + переменной окружения ENV_VAR
      +
      java.lang.StringtoString() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        PeopleDatabase

        +
        public PeopleDatabase(java.util.logging.Logger logger)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        info

        +
        public java.lang.String info()
        +
      • +
      + + + +
        +
      • +

        load

        +
        public void load()
        +          throws Database.DatabaseLoadFailedException
        +
        Метод, инициализирующий базу данных из файла, находящемся по пути, указанном в + переменной окружения ENV_VAR
        +
        +
        Specified by:
        +
        load in interface Database
        +
        Throws:
        +
        Database.DatabaseLoadFailedException - если переменная окружения ENV_VAR не задана, + файла не существует, либо отсутствуют права на запись или чтение
        +
        +
      • +
      + + + +
        +
      • +

        save

        +
        public void save()
        +          throws Database.DatabaseSaveFailedException
        +
        Метод, сохраняющий базу данных в файл, находящемся по пути, указанном в + переменной окружения ENV_VAR
        +
        +
        Specified by:
        +
        save in interface Database
        +
        Throws:
        +
        Database.DatabaseSaveFailedException - если переменная окружения ENV_VAR не задана, + файла не существует, либо отсутствуют права на запись или чтение, или если структура xml файла + была каким-либо образом нарушена
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/collection/package-frame.html b/Lab5Core/build/docs/javadoc/common/collection/package-frame.html new file mode 100644 index 0000000..6eb7126 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/collection/package-frame.html @@ -0,0 +1,28 @@ + + + + + +common.collection (Lab5Core 2.0 API) + + + + +

common.collection

+ + + diff --git a/Lab5Core/build/docs/javadoc/common/collection/package-summary.html b/Lab5Core/build/docs/javadoc/common/collection/package-summary.html new file mode 100644 index 0000000..b7745b7 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/collection/package-summary.html @@ -0,0 +1,177 @@ + + + + + +common.collection (Lab5Core 2.0 API) + + + + + + + + + + +
+

Package common.collection

+
+
+ +
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/collection/package-tree.html b/Lab5Core/build/docs/javadoc/common/collection/package-tree.html new file mode 100644 index 0000000..ec9297d --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/collection/package-tree.html @@ -0,0 +1,148 @@ + + + + + +common.collection Class Hierarchy (Lab5Core 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package common.collection

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/Executable.html b/Lab5Core/build/docs/javadoc/common/commandline/Executable.html new file mode 100644 index 0000000..b3474e6 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/Executable.html @@ -0,0 +1,228 @@ + + + + + +Executable (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.commandline
+

Interface Executable

+
+
+
+
    +
  • +
    +
    All Superinterfaces:
    +
    java.io.Serializable
    +
    +
    +
    Functional Interface:
    +
    This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
    +
    +
    +
    +
    @FunctionalInterface
    +public interface Executable
    +extends java.io.Serializable
    +
  • +
+
+
+ +
+
+
    +
  • + + +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/Executables.html b/Lab5Core/build/docs/javadoc/common/commandline/Executables.html new file mode 100644 index 0000000..d675b32 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/Executables.html @@ -0,0 +1,471 @@ + + + + + +Executables (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.commandline
+

Enum Executables

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Enum<Executables>
    • +
    • +
        +
      • common.commandline.Executables
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<Executables>
    +
    +
    +
    +
    public enum Executables
    +extends java.lang.Enum<Executables>
    +
  • +
+
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static Executables[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (Executables c : Executables.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static Executables valueOf(java.lang.String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
        +
        java.lang.NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getExecutable

        +
        public Executable getExecutable()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/package-frame.html b/Lab5Core/build/docs/javadoc/common/commandline/package-frame.html new file mode 100644 index 0000000..0157f03 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/package-frame.html @@ -0,0 +1,23 @@ + + + + + +common.commandline (Lab5Core 2.0 API) + + + + +

common.commandline

+
+

Interfaces

+ +

Enums

+ +
+ + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/package-summary.html b/Lab5Core/build/docs/javadoc/common/commandline/package-summary.html new file mode 100644 index 0000000..3641aac --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/package-summary.html @@ -0,0 +1,154 @@ + + + + + +common.commandline (Lab5Core 2.0 API) + + + + + + + + + + +
+

Package common.commandline

+
+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    Executable 
    +
  • +
  • + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    Executables 
    +
  • +
+
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/package-tree.html b/Lab5Core/build/docs/javadoc/common/commandline/package-tree.html new file mode 100644 index 0000000..3d0de5f --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/package-tree.html @@ -0,0 +1,146 @@ + + + + + +common.commandline Class Hierarchy (Lab5Core 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package common.commandline

+Package Hierarchies: + +
+
+

Interface Hierarchy

+
    +
  • java.io.Serializable + +
  • +
+

Enum Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
    • +
    +
  • +
+
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/response/CommandResult.html b/Lab5Core/build/docs/javadoc/common/commandline/response/CommandResult.html new file mode 100644 index 0000000..3144195 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/response/CommandResult.html @@ -0,0 +1,292 @@ + + + + + +CommandResult (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.commandline.response
+

Class CommandResult

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • common.commandline.response.CommandResult
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class CommandResult
    +extends java.lang.Object
    +implements java.io.Serializable
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CommandResult(java.lang.String value, + Response response) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      ResponsegetResponse() 
      java.lang.StringgetValue() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CommandResult

        +
        public CommandResult(java.lang.String value,
        +                     Response response)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getValue

        +
        public java.lang.String getValue()
        +
      • +
      + + + +
        +
      • +

        getResponse

        +
        public Response getResponse()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/response/DefaultResponse.html b/Lab5Core/build/docs/javadoc/common/commandline/response/DefaultResponse.html new file mode 100644 index 0000000..d157cf4 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/response/DefaultResponse.html @@ -0,0 +1,428 @@ + + + + + +DefaultResponse (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.commandline.response
+

Enum DefaultResponse

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Enum<DefaultResponse>
    • +
    • +
        +
      • common.commandline.response.DefaultResponse
      • +
      +
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static DefaultResponse[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (DefaultResponse c : DefaultResponse.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static DefaultResponse valueOf(java.lang.String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
        +
        java.lang.NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getMsg

        +
        public java.lang.String getMsg()
        +
        +
        Specified by:
        +
        getMsg in interface Response
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/response/PeopleDatabaseResponse.html b/Lab5Core/build/docs/javadoc/common/commandline/response/PeopleDatabaseResponse.html new file mode 100644 index 0000000..916834c --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/response/PeopleDatabaseResponse.html @@ -0,0 +1,368 @@ + + + + + +PeopleDatabaseResponse (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.commandline.response
+

Enum PeopleDatabaseResponse

+
+
+
    +
  • java.lang.Object
  • +
  • + +
  • +
+
+ +
+
+
    +
  • + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.StringgetMsg() 
      static PeopleDatabaseResponsevalueOf(java.lang.String name) +
      Returns the enum constant of this type with the specified name.
      +
      static PeopleDatabaseResponse[]values() +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Enum

        +clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +getClass, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static PeopleDatabaseResponse[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (PeopleDatabaseResponse c : PeopleDatabaseResponse.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static PeopleDatabaseResponse valueOf(java.lang.String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
        +
        java.lang.NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getMsg

        +
        public java.lang.String getMsg()
        +
        +
        Specified by:
        +
        getMsg in interface Response
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/response/Response.html b/Lab5Core/build/docs/javadoc/common/commandline/response/Response.html new file mode 100644 index 0000000..43a1ac9 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/response/Response.html @@ -0,0 +1,227 @@ + + + + + +Response (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.commandline.response
+

Interface Response

+
+
+
+
    +
  • +
    +
    All Superinterfaces:
    +
    java.io.Serializable
    +
    +
    +
    All Known Implementing Classes:
    +
    DefaultResponse, PeopleDatabaseResponse
    +
    +
    +
    +
    public interface Response
    +extends java.io.Serializable
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getMsg

        +
        java.lang.String getMsg()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/response/package-frame.html b/Lab5Core/build/docs/javadoc/common/commandline/response/package-frame.html new file mode 100644 index 0000000..92c3609 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/response/package-frame.html @@ -0,0 +1,28 @@ + + + + + +common.commandline.response (Lab5Core 2.0 API) + + + + +

common.commandline.response

+
+

Interfaces

+ +

Classes

+ +

Enums

+ +
+ + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/response/package-summary.html b/Lab5Core/build/docs/javadoc/common/commandline/response/package-summary.html new file mode 100644 index 0000000..fc4f3b2 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/response/package-summary.html @@ -0,0 +1,173 @@ + + + + + +common.commandline.response (Lab5Core 2.0 API) + + + + + + + + + + +
+

Package common.commandline.response

+
+
+ +
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/commandline/response/package-tree.html b/Lab5Core/build/docs/javadoc/common/commandline/response/package-tree.html new file mode 100644 index 0000000..b69fa75 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/commandline/response/package-tree.html @@ -0,0 +1,155 @@ + + + + + +common.commandline.response Class Hierarchy (Lab5Core 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package common.commandline.response

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • common.commandline.response.CommandResult (implements java.io.Serializable)
    • +
    +
  • +
+

Interface Hierarchy

+
    +
  • java.io.Serializable +
      +
    • common.commandline.response.Response
    • +
    +
  • +
+

Enum Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
    • +
    +
  • +
+
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/data/Color.html b/Lab5Core/build/docs/javadoc/common/data/Color.html new file mode 100644 index 0000000..6edb537 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/data/Color.html @@ -0,0 +1,352 @@ + + + + + +Color (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.data
+

Enum Color

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Enum<Color>
    • +
    • +
        +
      • common.data.Color
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<Color>
    +
    +
    +
    +
    public enum Color
    +extends java.lang.Enum<Color>
    +implements java.io.Serializable
    +
    Перечисление цветов
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + +
      Enum Constants 
      Enum Constant and Description
      BLACK 
      BROWN 
      ORANGE 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static ColorvalueOf(java.lang.String name) +
      Returns the enum constant of this type with the specified name.
      +
      static Color[]values() +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Enum

        +clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +getClass, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        BLACK

        +
        public static final Color BLACK
        +
      • +
      + + + +
        +
      • +

        ORANGE

        +
        public static final Color ORANGE
        +
      • +
      + + + +
        +
      • +

        BROWN

        +
        public static final Color BROWN
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static Color[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (Color c : Color.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static Color valueOf(java.lang.String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
        +
        java.lang.NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/data/Coordinates.html b/Lab5Core/build/docs/javadoc/common/data/Coordinates.html new file mode 100644 index 0000000..d9bced5 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/data/Coordinates.html @@ -0,0 +1,312 @@ + + + + + +Coordinates (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.data
+

Class Coordinates

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • common.data.Coordinates
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<Coordinates>
    +
    +
    +
    +
    public class Coordinates
    +extends java.lang.Object
    +implements java.lang.Comparable<Coordinates>, java.io.Serializable
    +
    Класс данных координат
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Coordinates(float x, + float y) +
      Конструктор с параметрами
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intcompareTo(Coordinates other) 
      voidsetY(float y) +
      Сеттер для поля y
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Coordinates

        +
        public Coordinates(float x,
        +                   float y)
        +
        Конструктор с параметрами
        +
        +
        Parameters:
        +
        x - Координата X
        +
        y - Координата Y
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setY

        +
        public void setY(float y)
        +
        Сеттер для поля y
        +
        +
        Parameters:
        +
        y - Координата Y
        +
        +
      • +
      + + + +
        +
      • +

        compareTo

        +
        public int compareTo(Coordinates other)
        +
        +
        Specified by:
        +
        compareTo in interface java.lang.Comparable<Coordinates>
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/data/Country.html b/Lab5Core/build/docs/javadoc/common/data/Country.html new file mode 100644 index 0000000..1b84ff8 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/data/Country.html @@ -0,0 +1,376 @@ + + + + + +Country (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.data
+

Enum Country

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Enum<Country>
    • +
    • +
        +
      • common.data.Country
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<Country>
    +
    +
    +
    +
    public enum Country
    +extends java.lang.Enum<Country>
    +implements java.io.Serializable
    +
    Перечисление стран
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static CountryvalueOf(java.lang.String name) +
      Returns the enum constant of this type with the specified name.
      +
      static Country[]values() +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Enum

        +clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +getClass, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        UNITED_KINGDOM

        +
        public static final Country UNITED_KINGDOM
        +
      • +
      + + + +
        +
      • +

        GERMANY

        +
        public static final Country GERMANY
        +
      • +
      + + + +
        +
      • +

        CHINA

        +
        public static final Country CHINA
        +
      • +
      + + + +
        +
      • +

        THAILAND

        +
        public static final Country THAILAND
        +
      • +
      + + + +
        +
      • +

        JAPAN

        +
        public static final Country JAPAN
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static Country[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (Country c : Country.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static Country valueOf(java.lang.String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
        +
        java.lang.NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/data/Location.html b/Lab5Core/build/docs/javadoc/common/data/Location.html new file mode 100644 index 0000000..7354ccc --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/data/Location.html @@ -0,0 +1,330 @@ + + + + + +Location (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.data
+

Class Location

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • common.data.Location
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<Location>
    +
    +
    +
    +
    public class Location
    +extends java.lang.Object
    +implements java.lang.Comparable<Location>, java.io.Serializable
    +
    Класс данных местоположения, реализует сортировку по умолчанию + по имени и расстоянию до точки (0; 0; 0)
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Location(double x, + float y, + long z, + java.lang.String name) +
      Конструктор с параметрами
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intcompareTo(Location other) +
      Переопределенный метод сравнения двух местоположений, + сравнение производится по имени локации и расстоянию до точки (0; 0; 0)
      +
      voidsetName(java.lang.String name) +
      Сеттер для поля name
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Location

        +
        public Location(double x,
        +                float y,
        +                long z,
        +                java.lang.String name)
        +
        Конструктор с параметрами
        +
        +
        Parameters:
        +
        x - Координата X
        +
        y - Координата Y
        +
        z - Координата Z
        +
        name - Имя локации
        +
        Throws:
        +
        java.lang.NullPointerException - будет брошено в случае, если Z является null
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String name)
        +
        Сеттер для поля name
        +
        +
        Parameters:
        +
        name - Имя локации
        +
        +
      • +
      + + + +
        +
      • +

        compareTo

        +
        public int compareTo(Location other)
        +
        Переопределенный метод сравнения двух местоположений, + сравнение производится по имени локации и расстоянию до точки (0; 0; 0)
        +
        +
        Specified by:
        +
        compareTo in interface java.lang.Comparable<Location>
        +
        Parameters:
        +
        other - Объект для сравнения
        +
        Returns:
        +
        Целое число - результат сравнения
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/data/Person.html b/Lab5Core/build/docs/javadoc/common/data/Person.html new file mode 100644 index 0000000..d3e7778 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/data/Person.html @@ -0,0 +1,420 @@ + + + + + +Person (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.data
+

Class Person

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • common.data.Person
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable, java.lang.Comparable<Person>
    +
    +
    +
    +
    public class Person
    +extends java.lang.Object
    +implements java.lang.Comparable<Person>, java.io.Serializable
    +
    Класс данных человека, реализует сортировку по умолчанию по имени, номеру паспорта, + росту, национальности, местоположению и цвету глаз
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Person(@NonNull java.lang.String name, + @NonNull Coordinates coordinates, + java.lang.Integer height, + java.lang.String passportID, + @NonNull Color eyeColor, + @NonNull Country nationality, + Location location) +
      Конструктор с параметрами
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intcompareTo(Person other) +
      Переопределенный метод сравнения двух людей, + сравнение производится по имени, номеру паспорта, + росту, национальности, местоположению и цвету глаз
      +
      java.lang.Stringformatted() 
      voidsetHeight(java.lang.Integer height) +
      Сеттер для поля height
      +
      voidsetName(java.lang.String name) +
      Сеттер для поля name
      +
      voidsetPassportID(java.lang.String passportID) +
      Сеттер для поля passportID
      +
      voidupdate(Person newPerson) +
      Метод, меняющий все значения полей человека (кроме id и creationDate) в соответствии + со значениями полей другого
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Person

        +
        public Person(@NonNull
        +              @NonNull java.lang.String name,
        +              @NonNull
        +              @NonNull Coordinates coordinates,
        +              java.lang.Integer height,
        +              java.lang.String passportID,
        +              @NonNull
        +              @NonNull Color eyeColor,
        +              @NonNull
        +              @NonNull Country nationality,
        +              Location location)
        +
        Конструктор с параметрами
        +
        +
        Parameters:
        +
        name - Имя человека
        +
        coordinates - Координаты человека
        +
        height - Высота человека
        +
        passportID - Номер паспорта человека
        +
        eyeColor - Цвет глаз человека
        +
        nationality - Национальность человека
        +
        location - Местоположение человека
        +
        Throws:
        +
        java.lang.NullPointerException - Если name, coordinates, eyeColor или nationality являются null
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        update

        +
        public void update(Person newPerson)
        +
        Метод, меняющий все значения полей человека (кроме id и creationDate) в соответствии + со значениями полей другого
        +
        +
        Parameters:
        +
        newPerson - человек, чьи поля будут присвоены текущему
        +
        +
      • +
      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String name)
        +
        Сеттер для поля name
        +
        +
        Parameters:
        +
        name - Имя человека
        +
        +
      • +
      + + + +
        +
      • +

        setHeight

        +
        public void setHeight(java.lang.Integer height)
        +
        Сеттер для поля height
        +
        +
        Parameters:
        +
        height - Рост человека
        +
        +
      • +
      + + + +
        +
      • +

        setPassportID

        +
        public void setPassportID(java.lang.String passportID)
        +
        Сеттер для поля passportID
        +
        +
        Parameters:
        +
        passportID - Номер паспорта человека
        +
        +
      • +
      + + + +
        +
      • +

        formatted

        +
        public java.lang.String formatted()
        +
      • +
      + + + +
        +
      • +

        compareTo

        +
        public int compareTo(Person other)
        +
        Переопределенный метод сравнения двух людей, + сравнение производится по имени, номеру паспорта, + росту, национальности, местоположению и цвету глаз
        +
        +
        Specified by:
        +
        compareTo in interface java.lang.Comparable<Person>
        +
        Parameters:
        +
        other - Объект для сравнения
        +
        Returns:
        +
        Целое число - результат сравнения
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/data/package-frame.html b/Lab5Core/build/docs/javadoc/common/data/package-frame.html new file mode 100644 index 0000000..c161a63 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/data/package-frame.html @@ -0,0 +1,26 @@ + + + + + +common.data (Lab5Core 2.0 API) + + + + +

common.data

+
+

Classes

+ +

Enums

+ +
+ + diff --git a/Lab5Core/build/docs/javadoc/common/data/package-summary.html b/Lab5Core/build/docs/javadoc/common/data/package-summary.html new file mode 100644 index 0000000..9209a7b --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/data/package-summary.html @@ -0,0 +1,178 @@ + + + + + +common.data (Lab5Core 2.0 API) + + + + + + + + + + +
+

Package common.data

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    Coordinates +
    Класс данных координат
    +
    Location +
    Класс данных местоположения, реализует сортировку по умолчанию + по имени и расстоянию до точки (0; 0; 0)
    +
    Person +
    Класс данных человека, реализует сортировку по умолчанию по имени, номеру паспорта, + росту, национальности, местоположению и цвету глаз
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    Color +
    Перечисление цветов
    +
    Country +
    Перечисление стран
    +
    +
  • +
+
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/data/package-tree.html b/Lab5Core/build/docs/javadoc/common/data/package-tree.html new file mode 100644 index 0000000..af23486 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/data/package-tree.html @@ -0,0 +1,149 @@ + + + + + +common.data Class Hierarchy (Lab5Core 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package common.data

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • common.data.Coordinates (implements java.lang.Comparable<T>, java.io.Serializable)
    • +
    • common.data.Location (implements java.lang.Comparable<T>, java.io.Serializable)
    • +
    • common.data.Person (implements java.lang.Comparable<T>, java.io.Serializable)
    • +
    +
  • +
+

Enum Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) +
        +
      • common.data.Country (implements java.io.Serializable)
      • +
      • common.data.Color (implements java.io.Serializable)
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/Adapters.ColorAdapter.html b/Lab5Core/build/docs/javadoc/common/parser/Adapters.ColorAdapter.html new file mode 100644 index 0000000..6c58592 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/Adapters.ColorAdapter.html @@ -0,0 +1,304 @@ + + + + + +Adapters.ColorAdapter (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class Adapters.ColorAdapter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,Color>
    • +
    • +
        +
      • common.parser.Adapters.ColorAdapter
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    Adapters
    +
    +
    +
    +
    public static class Adapters.ColorAdapter
    +extends javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,Color>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      ColorAdapter() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.Stringmarshal(Color v) 
      Colorunmarshal(java.lang.String v) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ColorAdapter

        +
        public ColorAdapter()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        unmarshal

        +
        public Color unmarshal(java.lang.String v)
        +                throws java.lang.Exception
        +
        +
        Specified by:
        +
        unmarshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,Color>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        marshal

        +
        public java.lang.String marshal(Color v)
        +                         throws java.lang.Exception
        +
        +
        Specified by:
        +
        marshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,Color>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/Adapters.CoordinateYAdapter.html b/Lab5Core/build/docs/javadoc/common/parser/Adapters.CoordinateYAdapter.html new file mode 100644 index 0000000..d1bee3c --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/Adapters.CoordinateYAdapter.html @@ -0,0 +1,304 @@ + + + + + +Adapters.CoordinateYAdapter (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class Adapters.CoordinateYAdapter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.Float>
    • +
    • +
        +
      • common.parser.Adapters.CoordinateYAdapter
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    Adapters
    +
    +
    +
    +
    public static class Adapters.CoordinateYAdapter
    +extends javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.Float>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CoordinateYAdapter() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.Stringmarshal(java.lang.Float v) 
      java.lang.Floatunmarshal(java.lang.String v) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CoordinateYAdapter

        +
        public CoordinateYAdapter()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        unmarshal

        +
        public java.lang.Float unmarshal(java.lang.String v)
        +                          throws java.lang.Exception
        +
        +
        Specified by:
        +
        unmarshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.Float>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        marshal

        +
        public java.lang.String marshal(java.lang.Float v)
        +                         throws java.lang.Exception
        +
        +
        Specified by:
        +
        marshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.Float>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/Adapters.CountryAdapter.html b/Lab5Core/build/docs/javadoc/common/parser/Adapters.CountryAdapter.html new file mode 100644 index 0000000..0baaefb --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/Adapters.CountryAdapter.html @@ -0,0 +1,304 @@ + + + + + +Adapters.CountryAdapter (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class Adapters.CountryAdapter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,Country>
    • +
    • +
        +
      • common.parser.Adapters.CountryAdapter
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    Adapters
    +
    +
    +
    +
    public static class Adapters.CountryAdapter
    +extends javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,Country>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      CountryAdapter() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.Stringmarshal(Country v) 
      Countryunmarshal(java.lang.String v) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CountryAdapter

        +
        public CountryAdapter()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        unmarshal

        +
        public Country unmarshal(java.lang.String v)
        +                  throws java.lang.Exception
        +
        +
        Specified by:
        +
        unmarshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,Country>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        marshal

        +
        public java.lang.String marshal(Country v)
        +                         throws java.lang.Exception
        +
        +
        Specified by:
        +
        marshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,Country>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/Adapters.HeightAdapter.html b/Lab5Core/build/docs/javadoc/common/parser/Adapters.HeightAdapter.html new file mode 100644 index 0000000..94ef19a --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/Adapters.HeightAdapter.html @@ -0,0 +1,304 @@ + + + + + +Adapters.HeightAdapter (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class Adapters.HeightAdapter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.Integer>
    • +
    • +
        +
      • common.parser.Adapters.HeightAdapter
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    Adapters
    +
    +
    +
    +
    public static class Adapters.HeightAdapter
    +extends javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.Integer>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      HeightAdapter() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.Stringmarshal(java.lang.Integer v) 
      java.lang.Integerunmarshal(java.lang.String v) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HeightAdapter

        +
        public HeightAdapter()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        unmarshal

        +
        public java.lang.Integer unmarshal(java.lang.String v)
        +                            throws java.lang.Exception
        +
        +
        Specified by:
        +
        unmarshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.Integer>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        marshal

        +
        public java.lang.String marshal(java.lang.Integer v)
        +                         throws java.lang.Exception
        +
        +
        Specified by:
        +
        marshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.Integer>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/Adapters.LocalDateAdapter.html b/Lab5Core/build/docs/javadoc/common/parser/Adapters.LocalDateAdapter.html new file mode 100644 index 0000000..8dbd1d1 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/Adapters.LocalDateAdapter.html @@ -0,0 +1,304 @@ + + + + + +Adapters.LocalDateAdapter (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class Adapters.LocalDateAdapter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.time.LocalDate>
    • +
    • +
        +
      • common.parser.Adapters.LocalDateAdapter
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    Adapters
    +
    +
    +
    +
    public static class Adapters.LocalDateAdapter
    +extends javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.time.LocalDate>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      LocalDateAdapter() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.Stringmarshal(java.time.LocalDate v) 
      java.time.LocalDateunmarshal(java.lang.String v) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        LocalDateAdapter

        +
        public LocalDateAdapter()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        unmarshal

        +
        public java.time.LocalDate unmarshal(java.lang.String v)
        +                              throws java.lang.Exception
        +
        +
        Specified by:
        +
        unmarshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.time.LocalDate>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        marshal

        +
        public java.lang.String marshal(java.time.LocalDate v)
        +                         throws java.lang.Exception
        +
        +
        Specified by:
        +
        marshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.time.LocalDate>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/Adapters.NameAdapter.html b/Lab5Core/build/docs/javadoc/common/parser/Adapters.NameAdapter.html new file mode 100644 index 0000000..fa07140 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/Adapters.NameAdapter.html @@ -0,0 +1,304 @@ + + + + + +Adapters.NameAdapter (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class Adapters.NameAdapter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.String>
    • +
    • +
        +
      • common.parser.Adapters.NameAdapter
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    Adapters
    +
    +
    +
    +
    public static class Adapters.NameAdapter
    +extends javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.String>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      NameAdapter() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.Stringmarshal(java.lang.String v) 
      java.lang.Stringunmarshal(java.lang.String v) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        NameAdapter

        +
        public NameAdapter()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        unmarshal

        +
        public java.lang.String unmarshal(java.lang.String v)
        +                           throws java.lang.Exception
        +
        +
        Specified by:
        +
        unmarshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.String>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        marshal

        +
        public java.lang.String marshal(java.lang.String v)
        +                         throws java.lang.Exception
        +
        +
        Specified by:
        +
        marshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.String>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/Adapters.PassportAdapter.html b/Lab5Core/build/docs/javadoc/common/parser/Adapters.PassportAdapter.html new file mode 100644 index 0000000..359f422 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/Adapters.PassportAdapter.html @@ -0,0 +1,304 @@ + + + + + +Adapters.PassportAdapter (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class Adapters.PassportAdapter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.String>
    • +
    • +
        +
      • common.parser.Adapters.PassportAdapter
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    Adapters
    +
    +
    +
    +
    public static class Adapters.PassportAdapter
    +extends javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.String>
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      PassportAdapter() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.Stringmarshal(java.lang.String v) 
      java.lang.Stringunmarshal(java.lang.String v) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        PassportAdapter

        +
        public PassportAdapter()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        unmarshal

        +
        public java.lang.String unmarshal(java.lang.String v)
        +                           throws java.lang.Exception
        +
        +
        Specified by:
        +
        unmarshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.String>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      + + + +
        +
      • +

        marshal

        +
        public java.lang.String marshal(java.lang.String v)
        +                         throws java.lang.Exception
        +
        +
        Specified by:
        +
        marshal in class javax.xml.bind.annotation.adapters.XmlAdapter<java.lang.String,java.lang.String>
        +
        Throws:
        +
        java.lang.Exception
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/Adapters.html b/Lab5Core/build/docs/javadoc/common/parser/Adapters.html new file mode 100644 index 0000000..08cff8a --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/Adapters.html @@ -0,0 +1,433 @@ + + + + + +Adapters (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class Adapters

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • common.parser.Adapters
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class Adapters
    +extends java.lang.Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_DATE

        +
        public static final java.time.LocalDate DEFAULT_DATE
        +
      • +
      + + + + + + + +
        +
      • +

        DEFAULT_COLOR

        +
        public static final Color DEFAULT_COLOR
        +
      • +
      + + + +
        +
      • +

        DEFAULT_COUNTRY

        +
        public static final Country DEFAULT_COUNTRY
        +
      • +
      + + + +
        +
      • +

        DEFAULT_NAME

        +
        public static final java.lang.String DEFAULT_NAME
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_PASSPORT

        +
        public static final java.lang.String DEFAULT_PASSPORT
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_COORDINATE

        +
        public static final int DEFAULT_COORDINATE
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        DEFAULT_COORDINATES

        +
        public static final Coordinates DEFAULT_COORDINATES
        +
      • +
      + + + +
        +
      • +

        DEFAULT_LOCATION

        +
        public static final Location DEFAULT_LOCATION
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Adapters

        +
        public Adapters()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/ConnectionProperties.html b/Lab5Core/build/docs/javadoc/common/parser/ConnectionProperties.html new file mode 100644 index 0000000..d5b9365 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/ConnectionProperties.html @@ -0,0 +1,281 @@ + + + + + +ConnectionProperties (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.parser
+

Class ConnectionProperties

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • common.parser.ConnectionProperties
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class ConnectionProperties
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static java.lang.StringgetHostname() 
      static intgetPort() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ConnectionProperties

        +
        public ConnectionProperties()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getHostname

        +
        public static java.lang.String getHostname()
        +
      • +
      + + + +
        +
      • +

        getPort

        +
        public static int getPort()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/package-frame.html b/Lab5Core/build/docs/javadoc/common/parser/package-frame.html new file mode 100644 index 0000000..2def28f --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/package-frame.html @@ -0,0 +1,27 @@ + + + + + +common.parser (Lab5Core 2.0 API) + + + + +

common.parser

+ + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/package-summary.html b/Lab5Core/build/docs/javadoc/common/parser/package-summary.html new file mode 100644 index 0000000..7873591 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/package-summary.html @@ -0,0 +1,171 @@ + + + + + +common.parser (Lab5Core 2.0 API) + + + + + + + + + + +
+

Package common.parser

+
+
+ +
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/parser/package-tree.html b/Lab5Core/build/docs/javadoc/common/parser/package-tree.html new file mode 100644 index 0000000..be4787c --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/parser/package-tree.html @@ -0,0 +1,146 @@ + + + + + +common.parser Class Hierarchy (Lab5Core 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package common.parser

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/util/UtilFunctions.html b/Lab5Core/build/docs/javadoc/common/util/UtilFunctions.html new file mode 100644 index 0000000..4201da6 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/util/UtilFunctions.html @@ -0,0 +1,289 @@ + + + + + +UtilFunctions (Lab5Core 2.0 API) + + + + + + + + + + + +
+
common.util
+

Class UtilFunctions

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • common.util.UtilFunctions
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public final class UtilFunctions
    +extends java.lang.Object
    +
    Класс функций-утилит для избавления от повторяющихся участков кода и выноса их в методы для общего пользования
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static java.lang.DoubledoubleOrNull(java.lang.String number) 
      static <T extends java.lang.Enum<T>>
      T
      enumOrNull(java.lang.String value, + java.lang.Class<T> enumType) 
      static java.lang.FloatfloatOrNull(java.lang.String number) 
      static java.lang.IntegerintOrNull(java.lang.String number) 
      static java.lang.LonglongOrNull(java.lang.String number) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        intOrNull

        +
        public static java.lang.Integer intOrNull(java.lang.String number)
        +
      • +
      + + + +
        +
      • +

        longOrNull

        +
        public static java.lang.Long longOrNull(java.lang.String number)
        +
      • +
      + + + +
        +
      • +

        floatOrNull

        +
        public static java.lang.Float floatOrNull(java.lang.String number)
        +
      • +
      + + + +
        +
      • +

        doubleOrNull

        +
        public static java.lang.Double doubleOrNull(java.lang.String number)
        +
      • +
      + + + +
        +
      • +

        enumOrNull

        +
        public static <T extends java.lang.Enum<T>> T enumOrNull(java.lang.String value,
        +                                                         java.lang.Class<T> enumType)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/util/package-frame.html b/Lab5Core/build/docs/javadoc/common/util/package-frame.html new file mode 100644 index 0000000..fad8071 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/util/package-frame.html @@ -0,0 +1,19 @@ + + + + + +common.util (Lab5Core 2.0 API) + + + + +

common.util

+
+

Classes

+ +
+ + diff --git a/Lab5Core/build/docs/javadoc/common/util/package-summary.html b/Lab5Core/build/docs/javadoc/common/util/package-summary.html new file mode 100644 index 0000000..1893357 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/util/package-summary.html @@ -0,0 +1,141 @@ + + + + + +common.util (Lab5Core 2.0 API) + + + + + + + + + + +
+

Package common.util

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    UtilFunctions +
    Класс функций-утилит для избавления от повторяющихся участков кода и выноса их в методы для общего пользования
    +
    +
  • +
+
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/common/util/package-tree.html b/Lab5Core/build/docs/javadoc/common/util/package-tree.html new file mode 100644 index 0000000..0925422 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/common/util/package-tree.html @@ -0,0 +1,134 @@ + + + + + +common.util Class Hierarchy (Lab5Core 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package common.util

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/constant-values.html b/Lab5Core/build/docs/javadoc/constant-values.html new file mode 100644 index 0000000..346777b --- /dev/null +++ b/Lab5Core/build/docs/javadoc/constant-values.html @@ -0,0 +1,171 @@ + + + + + +Constant Field Values (Lab5Core 2.0 API) + + + + + + + + + + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

common.parser.*

+ +
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/deprecated-list.html b/Lab5Core/build/docs/javadoc/deprecated-list.html new file mode 100644 index 0000000..8c3c7cc --- /dev/null +++ b/Lab5Core/build/docs/javadoc/deprecated-list.html @@ -0,0 +1,121 @@ + + + + + +Deprecated List (Lab5Core 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Core/build/docs/javadoc/help-doc.html b/Lab5Core/build/docs/javadoc/help-doc.html new file mode 100644 index 0000000..ae707d4 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/help-doc.html @@ -0,0 +1,222 @@ + + + + + +API Help (Lab5Core 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
  • +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Core/build/docs/javadoc/index-all.html b/Lab5Core/build/docs/javadoc/index-all.html new file mode 100644 index 0000000..8071929 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/index-all.html @@ -0,0 +1,531 @@ + + + + + +Index (Lab5Core 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
A C D E F G H I L M N P R S T U V  + + +

A

+
+
Adapters - Class in common.parser
+
 
+
Adapters() - Constructor for class common.parser.Adapters
+
 
+
Adapters.ColorAdapter - Class in common.parser
+
 
+
Adapters.CoordinateYAdapter - Class in common.parser
+
 
+
Adapters.CountryAdapter - Class in common.parser
+
 
+
Adapters.HeightAdapter - Class in common.parser
+
 
+
Adapters.LocalDateAdapter - Class in common.parser
+
 
+
Adapters.NameAdapter - Class in common.parser
+
 
+
Adapters.PassportAdapter - Class in common.parser
+
 
+
+ + + +

C

+
+
Color - Enum in common.data
+
+
Перечисление цветов
+
+
ColorAdapter() - Constructor for class common.parser.Adapters.ColorAdapter
+
 
+
CommandResult - Class in common.commandline.response
+
 
+
CommandResult(String, Response) - Constructor for class common.commandline.response.CommandResult
+
 
+
common.collection - package common.collection
+
 
+
common.commandline - package common.commandline
+
 
+
common.commandline.response - package common.commandline.response
+
 
+
common.data - package common.data
+
 
+
common.parser - package common.parser
+
 
+
common.util - package common.util
+
 
+
compareTo(Coordinates) - Method in class common.data.Coordinates
+
 
+
compareTo(Location) - Method in class common.data.Location
+
+
Переопределенный метод сравнения двух местоположений, + сравнение производится по имени локации и расстоянию до точки (0; 0; 0)
+
+
compareTo(Person) - Method in class common.data.Person
+
+
Переопределенный метод сравнения двух людей, + сравнение производится по имени, номеру паспорта, + росту, национальности, местоположению и цвету глаз
+
+
ConnectionProperties - Class in common.parser
+
 
+
ConnectionProperties() - Constructor for class common.parser.ConnectionProperties
+
 
+
Coordinates - Class in common.data
+
+
Класс данных координат
+
+
Coordinates(float, float) - Constructor for class common.data.Coordinates
+
+
Конструктор с параметрами
+
+
CoordinateYAdapter() - Constructor for class common.parser.Adapters.CoordinateYAdapter
+
 
+
Country - Enum in common.data
+
+
Перечисление стран
+
+
CountryAdapter() - Constructor for class common.parser.Adapters.CountryAdapter
+
 
+
+ + + +

D

+
+
Database - Interface in common.collection
+
+
Интерфейс баз данных с методами Database.load() и Database.save()
+
+
Database.DatabaseLoadFailedException - Exception in common.collection
+
 
+
Database.DatabaseSaveFailedException - Exception in common.collection
+
 
+
DatabaseLoadFailedException(String) - Constructor for exception common.collection.Database.DatabaseLoadFailedException
+
 
+
DatabaseLoadFailedException(String, String) - Constructor for exception common.collection.Database.DatabaseLoadFailedException
+
 
+
DatabaseLoadFailedException(String, Throwable) - Constructor for exception common.collection.Database.DatabaseLoadFailedException
+
 
+
DatabaseLoadFailedException(String, String, Throwable) - Constructor for exception common.collection.Database.DatabaseLoadFailedException
+
 
+
DatabaseLoadFailedException(Throwable) - Constructor for exception common.collection.Database.DatabaseLoadFailedException
+
 
+
DatabaseSaveFailedException(String) - Constructor for exception common.collection.Database.DatabaseSaveFailedException
+
 
+
DatabaseSaveFailedException(String, String) - Constructor for exception common.collection.Database.DatabaseSaveFailedException
+
 
+
DatabaseSaveFailedException(String, Throwable) - Constructor for exception common.collection.Database.DatabaseSaveFailedException
+
 
+
DatabaseSaveFailedException(String, String, Throwable) - Constructor for exception common.collection.Database.DatabaseSaveFailedException
+
 
+
DatabaseSaveFailedException(Throwable) - Constructor for exception common.collection.Database.DatabaseSaveFailedException
+
 
+
DEFAULT_COLOR - Static variable in class common.parser.Adapters
+
 
+
DEFAULT_COORDINATE - Static variable in class common.parser.Adapters
+
 
+
DEFAULT_COORDINATES - Static variable in class common.parser.Adapters
+
 
+
DEFAULT_COUNTRY - Static variable in class common.parser.Adapters
+
 
+
DEFAULT_DATE - Static variable in class common.parser.Adapters
+
 
+
DEFAULT_HEIGHT - Static variable in class common.parser.Adapters
+
 
+
DEFAULT_LOCATION - Static variable in class common.parser.Adapters
+
 
+
DEFAULT_NAME - Static variable in class common.parser.Adapters
+
 
+
DEFAULT_PASSPORT - Static variable in class common.parser.Adapters
+
 
+
DefaultResponse - Enum in common.commandline.response
+
 
+
doubleOrNull(String) - Static method in class common.util.UtilFunctions
+
 
+
+ + + +

E

+
+
enumOrNull(String, Class<T>) - Static method in class common.util.UtilFunctions
+
 
+
Executable - Interface in common.commandline
+
 
+
Executables - Enum in common.commandline
+
 
+
execute(Object[]) - Method in interface common.commandline.Executable
+
 
+
+ + + +

F

+
+
floatOrNull(String) - Static method in class common.util.UtilFunctions
+
 
+
formatted() - Method in class common.data.Person
+
 
+
+ + + +

G

+
+
getExecutable() - Method in enum common.commandline.Executables
+
 
+
getHostname() - Static method in class common.parser.ConnectionProperties
+
 
+
getMsg() - Method in enum common.commandline.response.DefaultResponse
+
 
+
getMsg() - Method in enum common.commandline.response.PeopleDatabaseResponse
+
 
+
getMsg() - Method in interface common.commandline.response.Response
+
 
+
getPort() - Static method in class common.parser.ConnectionProperties
+
 
+
getResponse() - Method in class common.commandline.response.CommandResult
+
 
+
getValue() - Method in class common.commandline.response.CommandResult
+
 
+
+ + + +

H

+
+
HeightAdapter() - Constructor for class common.parser.Adapters.HeightAdapter
+
 
+
+ + + +

I

+
+
info() - Method in class common.collection.PeopleDatabase
+
 
+
intOrNull(String) - Static method in class common.util.UtilFunctions
+
 
+
+ + + +

L

+
+
load() - Method in interface common.collection.Database
+
 
+
load() - Method in class common.collection.PeopleDatabase
+
+
Метод, инициализирующий базу данных из файла, находящемся по пути, указанном в + переменной окружения PeopleDatabase.ENV_VAR
+
+
LocalDateAdapter() - Constructor for class common.parser.Adapters.LocalDateAdapter
+
 
+
Location - Class in common.data
+
+
Класс данных местоположения, реализует сортировку по умолчанию + по имени и расстоянию до точки (0; 0; 0)
+
+
Location(double, float, long, String) - Constructor for class common.data.Location
+
+
Конструктор с параметрами
+
+
longOrNull(String) - Static method in class common.util.UtilFunctions
+
 
+
+ + + +

M

+
+
marshal(Color) - Method in class common.parser.Adapters.ColorAdapter
+
 
+
marshal(Float) - Method in class common.parser.Adapters.CoordinateYAdapter
+
 
+
marshal(Country) - Method in class common.parser.Adapters.CountryAdapter
+
 
+
marshal(Integer) - Method in class common.parser.Adapters.HeightAdapter
+
 
+
marshal(LocalDate) - Method in class common.parser.Adapters.LocalDateAdapter
+
 
+
marshal(String) - Method in class common.parser.Adapters.NameAdapter
+
 
+
marshal(String) - Method in class common.parser.Adapters.PassportAdapter
+
 
+
+ + + +

N

+
+
NameAdapter() - Constructor for class common.parser.Adapters.NameAdapter
+
 
+
+ + + +

P

+
+
PassportAdapter() - Constructor for class common.parser.Adapters.PassportAdapter
+
 
+
PeopleDatabase - Class in common.collection
+
+
Класс базы данных людей, реализующий интерфейс Database
+
+
PeopleDatabase(Logger) - Constructor for class common.collection.PeopleDatabase
+
 
+
PeopleDatabaseResponse - Enum in common.commandline.response
+
 
+
Person - Class in common.data
+
+
Класс данных человека, реализует сортировку по умолчанию по имени, номеру паспорта, + росту, национальности, местоположению и цвету глаз
+
+
Person(String, Coordinates, Integer, String, Color, Country, Location) - Constructor for class common.data.Person
+
+
Конструктор с параметрами
+
+
+ + + +

R

+
+
Response - Interface in common.commandline.response
+
 
+
+ + + +

S

+
+
save() - Method in interface common.collection.Database
+
 
+
save() - Method in class common.collection.PeopleDatabase
+
+
Метод, сохраняющий базу данных в файл, находящемся по пути, указанном в + переменной окружения PeopleDatabase.ENV_VAR
+
+
setHeight(Integer) - Method in class common.data.Person
+
+
Сеттер для поля height
+
+
setName(String) - Method in class common.data.Location
+
+
Сеттер для поля name
+
+
setName(String) - Method in class common.data.Person
+
+
Сеттер для поля name
+
+
setPassportID(String) - Method in class common.data.Person
+
+
Сеттер для поля passportID
+
+
setY(float) - Method in class common.data.Coordinates
+
+
Сеттер для поля y
+
+
+ + + +

T

+
+
toString() - Method in class common.collection.PeopleDatabase
+
 
+
+ + + +

U

+
+
unmarshal(String) - Method in class common.parser.Adapters.ColorAdapter
+
 
+
unmarshal(String) - Method in class common.parser.Adapters.CoordinateYAdapter
+
 
+
unmarshal(String) - Method in class common.parser.Adapters.CountryAdapter
+
 
+
unmarshal(String) - Method in class common.parser.Adapters.HeightAdapter
+
 
+
unmarshal(String) - Method in class common.parser.Adapters.LocalDateAdapter
+
 
+
unmarshal(String) - Method in class common.parser.Adapters.NameAdapter
+
 
+
unmarshal(String) - Method in class common.parser.Adapters.PassportAdapter
+
 
+
update(Person) - Method in class common.data.Person
+
+
Метод, меняющий все значения полей человека (кроме Person.id и Person.creationDate) в соответствии + со значениями полей другого
+
+
UtilFunctions - Class in common.util
+
+
Класс функций-утилит для избавления от повторяющихся участков кода и выноса их в методы для общего пользования
+
+
+ + + +

V

+
+
valueOf(String) - Static method in enum common.commandline.Executables
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum common.commandline.response.DefaultResponse
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum common.commandline.response.PeopleDatabaseResponse
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum common.data.Color
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum common.data.Country
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum common.commandline.Executables
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum common.commandline.response.DefaultResponse
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum common.commandline.response.PeopleDatabaseResponse
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum common.data.Color
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum common.data.Country
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
+A C D E F G H I L M N P R S T U V 
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Core/build/docs/javadoc/index.html b/Lab5Core/build/docs/javadoc/index.html new file mode 100644 index 0000000..8b1a157 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/index.html @@ -0,0 +1,75 @@ + + + + + +Lab5Core 2.0 API + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/Lab5Core/build/docs/javadoc/overview-frame.html b/Lab5Core/build/docs/javadoc/overview-frame.html new file mode 100644 index 0000000..456bfdb --- /dev/null +++ b/Lab5Core/build/docs/javadoc/overview-frame.html @@ -0,0 +1,25 @@ + + + + + +Overview List (Lab5Core 2.0 API) + + + + + + +

 

+ + diff --git a/Lab5Core/build/docs/javadoc/overview-summary.html b/Lab5Core/build/docs/javadoc/overview-summary.html new file mode 100644 index 0000000..3b52350 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/overview-summary.html @@ -0,0 +1,155 @@ + + + + + +Overview (Lab5Core 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Lab5Core 2.0 API

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Packages 
PackageDescription
common.collection 
common.commandline 
common.commandline.response 
common.data 
common.parser 
common.util 
+
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Core/build/docs/javadoc/overview-tree.html b/Lab5Core/build/docs/javadoc/overview-tree.html new file mode 100644 index 0000000..380c7e9 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/overview-tree.html @@ -0,0 +1,193 @@ + + + + + +Class Hierarchy (Lab5Core 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +

Enum Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
    • +
    +
  • +
+
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Core/build/docs/javadoc/package-list b/Lab5Core/build/docs/javadoc/package-list new file mode 100644 index 0000000..0a83c9b --- /dev/null +++ b/Lab5Core/build/docs/javadoc/package-list @@ -0,0 +1,6 @@ +common.collection +common.commandline +common.commandline.response +common.data +common.parser +common.util diff --git a/Lab5Core/build/docs/javadoc/script.js b/Lab5Core/build/docs/javadoc/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/Lab5Core/build/docs/javadoc/serialized-form.html b/Lab5Core/build/docs/javadoc/serialized-form.html new file mode 100644 index 0000000..03eb8fb --- /dev/null +++ b/Lab5Core/build/docs/javadoc/serialized-form.html @@ -0,0 +1,284 @@ + + + + + +Serialized Form (Lab5Core 2.0 API) + + + + + + + + + + +
+

Serialized Form

+
+
+
    +
  • +

    Package common.collection

    + +
  • +
  • +

    Package common.commandline

    +
  • +
  • +

    Package common.commandline.response

    + +
  • +
  • +

    Package common.data

    +
      +
    • + + +

      Class common.data.Coordinates extends java.lang.Object implements Serializable

      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          x

          +
          float x
          +
          Координата X типа float
          +
        • +
        • +

          y

          +
          java.lang.Float y
          +
          Координата Y типа float, значение должно быть больше -816
          +
        • +
        +
      • +
      +
    • +
    • + + +

      Class common.data.Location extends java.lang.Object implements Serializable

      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          x

          +
          double x
          +
          Координата X типа double
          +
        • +
        • +

          y

          +
          float y
          +
          Координата Y типа float
          +
        • +
        • +

          z

          +
          long z
          +
          Координата Z типа long, не может быть null
          +
        • +
        • +

          name

          +
          java.lang.String name
          +
          Имя локации, может быть null
          +
        • +
        +
      • +
      +
    • +
    • + + +

      Class common.data.Person extends java.lang.Object implements Serializable

      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          id

          +
          java.lang.Long id
          +
          Id человека, не может быть null, значение поля должно быть больше 0, + значение этого поля должно быть уникальным, значение этого поля должно генерироваться автоматически
          +
        • +
        • +

          name

          +
          java.lang.String name
          +
          Имя человека, не может быть null, строка не может быть пустой
          +
        • +
        • +

          coordinates

          +
          Coordinates coordinates
          +
          Координаты человека, не может быть null
          +
        • +
        • +

          creationDate

          +
          java.time.LocalDate creationDate
          +
          Дата создания объекта, не может быть null, значение этого поля должно генерироваться автоматически
          +
        • +
        • +

          height

          +
          java.lang.Integer height
          +
          Рост человека, может быть null, значение поля должно быть больше 0
          +
        • +
        • +

          passportID

          +
          java.lang.String passportID
          +
          Номер паспорта человека, длина строки должна быть не меньше 8, поле может быть null
          +
        • +
        • +

          eyeColor

          +
          Color eyeColor
          +
          Цвет глаз человека, не может быть null
          +
        • +
        • +

          nationality

          +
          Country nationality
          +
          Национальность человека, не может быть null
          +
        • +
        • +

          location

          +
          Location location
          +
          Местоположение человека, может быть null
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/Lab5Core/build/docs/javadoc/stylesheet.css b/Lab5Core/build/docs/javadoc/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/Lab5Core/build/docs/javadoc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/Lab5Core/build/libs/Lab5Core-2.0.jar b/Lab5Core/build/libs/Lab5Core-2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..5437021624a005e410121edffa57ff7af7037d70 GIT binary patch literal 37831 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 Pnc*O?9s2>OkbwaJjPP3+ literal 0 HcmV?d00001 diff --git a/Lab5Core/build/resources/main/connection.properties b/Lab5Core/build/resources/main/connection.properties new file mode 100644 index 0000000..a1e7224 --- /dev/null +++ b/Lab5Core/build/resources/main/connection.properties @@ -0,0 +1,2 @@ +hostname=localhost +port=1234 diff --git a/Lab5Core/build/tmp/compileJava/previous-compilation-data.bin b/Lab5Core/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..af2aa2cfd8ccf12dbd631f96ce0b56f76748cb4a GIT binary patch literal 7203 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 literal 0 HcmV?d00001 diff --git a/Lab5Core/build/tmp/jar/MANIFEST.MF b/Lab5Core/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/Lab5Core/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/Lab5Core/build/tmp/javadoc/javadoc.options b/Lab5Core/build/tmp/javadoc/javadoc.options new file mode 100644 index 0000000..387e206 --- /dev/null +++ b/Lab5Core/build/tmp/javadoc/javadoc.options @@ -0,0 +1,23 @@ +-classpath 'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\build\\classes\\java\\main;C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\build\\resources\\main;C:\\Users\\egor\\.gradle\\caches\\modules-2\\files-2.1\\org.projectlombok\\lombok\\1.18.22\\9c08ea24c6eb714e2d6170e8122c069a0ba9aacf\\lombok-1.18.22.jar' +-d 'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\build\\docs\\javadoc' +-doctitle 'Lab5Core 2.0 API' +-encoding 'UTF-8' +-notimestamp +-quiet +-windowtitle 'Lab5Core 2.0 API' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\collection\\Database.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\collection\\PeopleDatabase.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\commandline\\Executable.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\commandline\\Executables.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\commandline\\response\\CommandResult.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\commandline\\response\\DefaultResponse.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\commandline\\response\\PeopleDatabaseResponse.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\commandline\\response\\Response.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\data\\Color.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\data\\Coordinates.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\data\\Country.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\data\\Location.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\data\\Person.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\parser\\Adapters.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\parser\\ConnectionProperties.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\src\\main\\java\\common\\util\\UtilFunctions.java' diff --git a/src/main/java/ru/erius/lab5/collection/Database.java b/Lab5Core/src/main/java/common/collection/Database.java similarity index 97% rename from src/main/java/ru/erius/lab5/collection/Database.java rename to Lab5Core/src/main/java/common/collection/Database.java index 06bbbe1..f7ab56b 100644 --- a/src/main/java/ru/erius/lab5/collection/Database.java +++ b/Lab5Core/src/main/java/common/collection/Database.java @@ -1,4 +1,4 @@ -package ru.erius.lab5.collection; +package common.collection; /** * Интерфейс баз данных с методами {@link #load()} и {@link #save()} diff --git a/src/main/java/ru/erius/lab5/collection/PeopleDatabase.java b/Lab5Core/src/main/java/common/collection/PeopleDatabase.java similarity index 76% rename from src/main/java/ru/erius/lab5/collection/PeopleDatabase.java rename to Lab5Core/src/main/java/common/collection/PeopleDatabase.java index b3e1e30..e31df18 100644 --- a/src/main/java/ru/erius/lab5/collection/PeopleDatabase.java +++ b/Lab5Core/src/main/java/common/collection/PeopleDatabase.java @@ -1,8 +1,8 @@ -package ru.erius.lab5.collection; +package common.collection; import lombok.Getter; -import ru.erius.lab5.data.Person; -import ru.erius.lab5.parser.Adapters; +import common.data.Person; +import common.parser.Adapters; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; @@ -16,12 +16,13 @@ import java.io.File; import java.io.IOException; import java.time.LocalDate; import java.util.TreeSet; +import java.util.logging.Logger; import java.util.stream.Collectors; /** * Класс базы данных людей, реализующий интерфейс Database * - * @see ru.erius.lab5.collection.Database + * @see Database */ @XmlRootElement public class PeopleDatabase implements Database { @@ -31,6 +32,8 @@ public class PeopleDatabase implements Database { DEFAULT_FILE_NAME = "lab5.xml", TYPE = "TreeSet"; + @XmlTransient + private Logger logger = Logger.getLogger("Lab5Client"); @XmlTransient private JAXBContext context; @XmlTransient @@ -51,6 +54,12 @@ public class PeopleDatabase implements Database { } } + private PeopleDatabase() {} + + public PeopleDatabase(Logger logger) { + this.logger = logger; + } + public String info() { return String.format("Тип коллекции: %s \n" + "Дата инициализации: %s \n" + @@ -67,19 +76,19 @@ public class PeopleDatabase implements Database { */ @Override public void load() throws Database.DatabaseLoadFailedException { - System.out.println("Инициализация коллекции из файла..."); + logger.info("Инициализация коллекции из файла..."); String path = System.getenv(ENV_VAR); boolean envSet = true; if (path == null) { - System.out.println("Не найдена переменная окружения LAB5_PATH, создание файла в директории jar файла"); + logger.warning("Не найдена переменная окружения LAB5_PATH, создание файла в директории jar файла"); path = "."; envSet = false; } File file = new File(path); if (!file.exists() && envSet) { - System.out.println("Файл " + file.getAbsolutePath() + " не был найден, создание файла в директории jar файла"); + logger.warning("Файл " + file.getAbsolutePath() + " не был найден, создание файла в директории jar файла"); file = new File("."); } if (file.isDirectory()) @@ -95,9 +104,9 @@ public class PeopleDatabase implements Database { PeopleDatabase pd = (PeopleDatabase) unmarshaller.unmarshal(file); this.collection = pd.collection; this.initDate = pd.initDate; - System.out.println("Инициализация успешно выполнена"); + logger.info("Инициализация успешно выполнена"); } catch (JAXBException e) { - System.out.println("Не удалось загрузить коллекцию из файла " + file.getAbsolutePath() + ", он пуст, либо нарушена структура xml"); + logger.severe("Не удалось загрузить коллекцию из файла " + file.getAbsolutePath() + ", он пуст, либо нарушена структура xml"); } } @@ -112,16 +121,17 @@ public class PeopleDatabase implements Database { @Override public void save() throws Database.DatabaseSaveFailedException { if (!file.exists()) { - System.out.println("Файла " + file.getAbsolutePath() + " не существует, возможно он был удален, пытаюсь воссоздать файл..."); + logger.warning("Файла " + file.getAbsolutePath() + " не существует, возможно он был удален, пытаюсь воссоздать файл..."); try { file.createNewFile(); - System.out.println("Файл был успешно создан"); + logger.info("Файл был успешно создан"); } catch (IOException e) { throw new DatabaseSaveFailedException("Не удается создать файл заново, пожалуйста, сделайте это вручную и попробуйте еще раз"); } } try { Marshaller marshaller = context.createMarshaller(); + marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(this, file); } catch (JAXBException e) { @@ -130,18 +140,18 @@ public class PeopleDatabase implements Database { } private File createFile(File file) { - System.out.println("Директория успешно найдена"); + logger.info("Директория успешно найдена"); file = new File(file.getAbsolutePath() + "/" + DEFAULT_FILE_NAME); boolean exists; try { exists = file.createNewFile(); } catch (IOException e) { e.printStackTrace(); - System.err.println("Что-то пошло не так"); + logger.severe("Что-то пошло не так"); System.exit(-1); return null; } - System.out.println(exists ? "Файл не найден, создание файла " + DEFAULT_FILE_NAME : "Файл успешно найден"); + logger.info(exists ? "Файл не найден, создание файла " + DEFAULT_FILE_NAME : "Файл успешно найден"); return file; } diff --git a/Lab5Core/src/main/java/common/commandline/Executable.java b/Lab5Core/src/main/java/common/commandline/Executable.java new file mode 100644 index 0000000..bffad8a --- /dev/null +++ b/Lab5Core/src/main/java/common/commandline/Executable.java @@ -0,0 +1,10 @@ +package common.commandline; + +import common.commandline.response.CommandResult; + +import java.io.Serializable; + +@FunctionalInterface +public interface Executable extends Serializable { + CommandResult execute(Object[] args); +} diff --git a/Lab5Core/src/main/java/common/commandline/Executables.java b/Lab5Core/src/main/java/common/commandline/Executables.java new file mode 100644 index 0000000..0d99a53 --- /dev/null +++ b/Lab5Core/src/main/java/common/commandline/Executables.java @@ -0,0 +1,117 @@ +package common.commandline; + +import common.collection.Database; +import common.collection.PeopleDatabase; +import common.commandline.response.CommandResult; +import common.commandline.response.DefaultResponse; +import common.commandline.response.PeopleDatabaseResponse; +import common.data.Person; + +import java.util.Collections; +import java.util.Optional; + +public enum Executables { + ADD(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + Person person = (Person) args[1]; + boolean success = peopleDatabase.getCollection().add(person); + return new CommandResult(null, success ? DefaultResponse.OK : PeopleDatabaseResponse.FAILED_TO_ADD); + }), + ADD_IF_MAX(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + Person person = (Person) args[1]; + Person last = peopleDatabase.getCollection().last(); + if (person.compareTo(last) > 0) return ADD.executable.execute(args); + return new CommandResult(null, PeopleDatabaseResponse.FAILED_TO_ADD); + }), + ADD_IF_MIN(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + Person person = (Person) args[1]; + Person first = peopleDatabase.getCollection().first(); + if (person.compareTo(first) < 0) return ADD.executable.execute(args); + return new CommandResult(null, PeopleDatabaseResponse.FAILED_TO_ADD); + }), + CLEAR(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + peopleDatabase.getCollection().clear(); + return new CommandResult(null, DefaultResponse.OK); + }), + FILTER_CONTAINS_NAME(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + String name = (String) args[1]; + StringBuilder result = new StringBuilder("Список людей, в имени которых содержится " + name + ":\n"); + peopleDatabase.getCollection() + .stream() + .filter(p -> p.getName().contains(name)) + .forEach(p -> result.append(p.formatted()).append("\n")); + return new CommandResult(result.toString(), DefaultResponse.OK); + }), + INFO(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + return new CommandResult(peopleDatabase.info(), DefaultResponse.OK); + }), + PRINT_FIELD_DESCENDING_LOCATION(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + StringBuilder result = new StringBuilder("Список локаций в порядке убывания:\n"); + peopleDatabase.getCollection() + .stream() + .map(Person::getLocation) + .sorted(Collections.reverseOrder()) + .forEach(loc -> result.append(loc).append("\n")); + return new CommandResult(result.toString(), DefaultResponse.OK); + }), + REMOVE_BY_ID(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + long id = (long) args[1]; + boolean success = peopleDatabase.getCollection().removeIf(p -> p.getId().equals(id)); + return new CommandResult(null, success ? DefaultResponse.OK : PeopleDatabaseResponse.ELEMENT_NOT_FOUND); + }), + SAVE(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + try { + peopleDatabase.save(); + return new CommandResult(null, DefaultResponse.OK); + } catch (Database.DatabaseSaveFailedException e) { + return new CommandResult(e.getMessage(), PeopleDatabaseResponse.SAVE_FAILED); + } + }), + SHOW(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + StringBuilder result = new StringBuilder("Элементы коллекции:\n"); + peopleDatabase.getCollection().forEach(p -> result.append(p.formatted())); + return new CommandResult(result.toString(), DefaultResponse.OK); + }), + SUM_OF_HEIGHT(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + int sum = peopleDatabase.getCollection() + .stream() + .mapToInt(p -> p.getHeight() == null ? 0 : p.getHeight()) + .sum(); + return new CommandResult("Сумма ростов всех людей в коллекции - " + sum, DefaultResponse.OK); + }), + UPDATE(args -> { + PeopleDatabase peopleDatabase = (PeopleDatabase) args[0]; + long id = (long) args[1]; + Person person = (Person) args[2]; + Optional optionalPerson = peopleDatabase.getCollection() + .stream() + .filter(p -> p.getId().equals(id)) + .findFirst(); + if (!optionalPerson.isPresent()) return new CommandResult(null, PeopleDatabaseResponse.ELEMENT_NOT_FOUND); + Person oldPerson = optionalPerson.get(); + CommandResult result = REMOVE_BY_ID.executable.execute(new Object[]{ peopleDatabase, id }); + if (result.getResponse() != DefaultResponse.OK) return result; + oldPerson.update(person); + return ADD.executable.execute(new Object[]{ peopleDatabase, oldPerson }); + }); + + private final Executable executable; + + Executables(Executable executable) { + this.executable = executable; + } + + public Executable getExecutable() { + return executable; + } +} diff --git a/Lab5Core/src/main/java/common/commandline/response/CommandResult.java b/Lab5Core/src/main/java/common/commandline/response/CommandResult.java new file mode 100644 index 0000000..361fbce --- /dev/null +++ b/Lab5Core/src/main/java/common/commandline/response/CommandResult.java @@ -0,0 +1,22 @@ +package common.commandline.response; + +import java.io.Serializable; + +public class CommandResult implements Serializable { + + private final String value; + private final Response response; + + public CommandResult(String value, Response response) { + this.value = value; + this.response = response; + } + + public String getValue() { + return value; + } + + public Response getResponse() { + return response; + } +} diff --git a/Lab5Core/src/main/java/common/commandline/response/DefaultResponse.java b/Lab5Core/src/main/java/common/commandline/response/DefaultResponse.java new file mode 100644 index 0000000..16cb780 --- /dev/null +++ b/Lab5Core/src/main/java/common/commandline/response/DefaultResponse.java @@ -0,0 +1,24 @@ +package common.commandline.response; + +public enum DefaultResponse implements Response { + + OK("Команда выполнена успешно"), + FILE_NOT_FOUND("Файл не был найден"), + CLIENT_ONLY("Команда не предназначена для выполнения на сервере"), + SERVER_ERROR("Ошибка при связи по сетевому каналу"), + CLASS_NOT_FOUND("Класс не найден"), + TYPE_ERROR("Получен ответ не того типа"), + HOST_NOT_FOUND("Хоста не существует"), + UNKNOWN("Неизвестная ошибка"); + + private final String msg; + + DefaultResponse(String msg) { + this.msg = msg; + } + + @Override + public String getMsg() { + return msg; + } +} diff --git a/Lab5Core/src/main/java/common/commandline/response/PeopleDatabaseResponse.java b/Lab5Core/src/main/java/common/commandline/response/PeopleDatabaseResponse.java new file mode 100644 index 0000000..ff0233f --- /dev/null +++ b/Lab5Core/src/main/java/common/commandline/response/PeopleDatabaseResponse.java @@ -0,0 +1,19 @@ +package common.commandline.response; + +public enum PeopleDatabaseResponse implements Response { + + ELEMENT_NOT_FOUND("Элемент не был найден"), + SAVE_FAILED("Не удалось сохранить коллекцию"), + FAILED_TO_ADD("Не удалось добавить элемент в коллекцию"); + + private final String msg; + + PeopleDatabaseResponse(String msg) { + this.msg = msg; + } + + @Override + public String getMsg() { + return msg; + } +} diff --git a/Lab5Core/src/main/java/common/commandline/response/Response.java b/Lab5Core/src/main/java/common/commandline/response/Response.java new file mode 100644 index 0000000..51c2684 --- /dev/null +++ b/Lab5Core/src/main/java/common/commandline/response/Response.java @@ -0,0 +1,7 @@ +package common.commandline.response; + +import java.io.Serializable; + +public interface Response extends Serializable { + String getMsg(); +} diff --git a/Lab5Core/src/main/java/common/data/Color.java b/Lab5Core/src/main/java/common/data/Color.java new file mode 100644 index 0000000..7c60a04 --- /dev/null +++ b/Lab5Core/src/main/java/common/data/Color.java @@ -0,0 +1,12 @@ +package common.data; + +import java.io.Serializable; + +/** + * Перечисление цветов + */ +public enum Color implements Serializable { + BLACK, + ORANGE, + BROWN +} diff --git a/src/main/java/ru/erius/lab5/data/Coordinates.java b/Lab5Core/src/main/java/common/data/Coordinates.java similarity index 90% rename from src/main/java/ru/erius/lab5/data/Coordinates.java rename to Lab5Core/src/main/java/common/data/Coordinates.java index 65cd756..96a7b1e 100644 --- a/src/main/java/ru/erius/lab5/data/Coordinates.java +++ b/Lab5Core/src/main/java/common/data/Coordinates.java @@ -1,18 +1,19 @@ -package ru.erius.lab5.data; +package common.data; import lombok.*; -import ru.erius.lab5.parser.Adapters; +import common.parser.Adapters; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import java.io.Serializable; /** * Класс данных координат */ @Data @EqualsAndHashCode @ToString @XmlAccessorType(XmlAccessType.FIELD) -public class Coordinates implements Comparable { +public class Coordinates implements Comparable, Serializable { /** * Координата X типа float diff --git a/src/main/java/ru/erius/lab5/data/Country.java b/Lab5Core/src/main/java/common/data/Country.java similarity index 54% rename from src/main/java/ru/erius/lab5/data/Country.java rename to Lab5Core/src/main/java/common/data/Country.java index ecc3322..d888b3c 100644 --- a/src/main/java/ru/erius/lab5/data/Country.java +++ b/Lab5Core/src/main/java/common/data/Country.java @@ -1,9 +1,11 @@ -package ru.erius.lab5.data; +package common.data; + +import java.io.Serializable; /** * Перечисление стран */ -public enum Country { +public enum Country implements Serializable { UNITED_KINGDOM, GERMANY, CHINA, diff --git a/src/main/java/ru/erius/lab5/data/Location.java b/Lab5Core/src/main/java/common/data/Location.java similarity index 94% rename from src/main/java/ru/erius/lab5/data/Location.java rename to Lab5Core/src/main/java/common/data/Location.java index 20d4b28..8fe4119 100644 --- a/src/main/java/ru/erius/lab5/data/Location.java +++ b/Lab5Core/src/main/java/common/data/Location.java @@ -1,11 +1,12 @@ -package ru.erius.lab5.data; +package common.data; import lombok.*; -import ru.erius.lab5.parser.Adapters; +import common.parser.Adapters; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; +import java.io.Serializable; import java.util.Comparator; /** @@ -14,7 +15,7 @@ import java.util.Comparator; */ @Data @EqualsAndHashCode @ToString @XmlAccessorType(XmlAccessType.FIELD) -public class Location implements Comparable { +public class Location implements Comparable, Serializable { /** * Координата X типа double */ diff --git a/src/main/java/ru/erius/lab5/data/Person.java b/Lab5Core/src/main/java/common/data/Person.java similarity index 98% rename from src/main/java/ru/erius/lab5/data/Person.java rename to Lab5Core/src/main/java/common/data/Person.java index 998cf69..7055dba 100644 --- a/src/main/java/ru/erius/lab5/data/Person.java +++ b/Lab5Core/src/main/java/common/data/Person.java @@ -1,13 +1,14 @@ -package ru.erius.lab5.data; +package common.data; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import lombok.ToString; -import ru.erius.lab5.parser.*; +import common.parser.Adapters; import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import java.io.Serializable; import java.time.LocalDate; import java.util.*; @@ -18,7 +19,7 @@ import java.util.*; @Data @EqualsAndHashCode @ToString @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class Person implements Comparable { +public class Person implements Comparable, Serializable { /** * Количество созданных людей, используется для задания * уникального id для каждого объекта данного класса diff --git a/src/main/java/ru/erius/lab5/parser/Adapters.java b/Lab5Core/src/main/java/common/parser/Adapters.java similarity index 96% rename from src/main/java/ru/erius/lab5/parser/Adapters.java rename to Lab5Core/src/main/java/common/parser/Adapters.java index 3f4e455..4ab80e1 100644 --- a/src/main/java/ru/erius/lab5/parser/Adapters.java +++ b/Lab5Core/src/main/java/common/parser/Adapters.java @@ -1,10 +1,10 @@ -package ru.erius.lab5.parser; +package common.parser; -import ru.erius.lab5.data.Color; -import ru.erius.lab5.data.Coordinates; -import ru.erius.lab5.data.Country; -import ru.erius.lab5.data.Location; -import ru.erius.lab5.util.UtilFunctions; +import common.data.Color; +import common.data.Coordinates; +import common.data.Country; +import common.data.Location; +import common.util.UtilFunctions; import javax.xml.bind.annotation.adapters.XmlAdapter; import java.time.LocalDate; diff --git a/Lab5Core/src/main/java/common/parser/ConnectionProperties.java b/Lab5Core/src/main/java/common/parser/ConnectionProperties.java new file mode 100644 index 0000000..3ecddb5 --- /dev/null +++ b/Lab5Core/src/main/java/common/parser/ConnectionProperties.java @@ -0,0 +1,61 @@ +package common.parser; + +import common.util.UtilFunctions; + +import java.io.*; +import java.util.Properties; +import java.util.logging.Logger; +import java.util.stream.Collectors; + +public final class ConnectionProperties { + + private final static Properties properties = new Properties(); + private static final Logger logger = Logger.getLogger("Lab5"); + + static { + File file = new File("connection.properties"); + try { + if (file.exists()) { + logger.info("Файл найден, загружаем настройки подключения..."); + } + else { + logger.warning("Файл не найден, создание файла " + file.getName()); + BufferedReader reader = new BufferedReader(new InputStreamReader(ConnectionProperties.class.getClassLoader().getResource("connection.properties").openStream())); + String content = reader.lines().collect(Collectors.joining("\n")); + file.createNewFile(); + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write(content); + writer.close(); + reader.close(); + logger.info("Файл создан, загружаем настройки подключения"); + } + properties.load(new FileInputStream(file)); + logger.info("Настройки подключения загружены из файла " + file.getName()); + } catch (IOException e) { + e.printStackTrace(); + System.exit(-1); + } + } + + public static String getHostname() { + String result = properties.getProperty("hostname"); + if (result == null) { + logger.severe("Свойство hostname не было найдено, используем значение по умолчанию localhost"); + return "localhost"; + } else return result; + } + + public static int getPort() { + String resultStr = properties.getProperty("port"); + if (resultStr == null) { + logger.severe("Свойство port не было найден, используем значение по умолчанию 1234"); + return 1234; + } + Integer result = UtilFunctions.intOrNull(resultStr); + if (result == null) { + logger.severe("Порт должен быть целым числом, используем значение по умолчанию 1234"); + return 1234; + } + return result; + } +} diff --git a/src/main/java/ru/erius/lab5/util/UtilFunctions.java b/Lab5Core/src/main/java/common/util/UtilFunctions.java similarity index 98% rename from src/main/java/ru/erius/lab5/util/UtilFunctions.java rename to Lab5Core/src/main/java/common/util/UtilFunctions.java index 0fd7c47..971b5fe 100644 --- a/src/main/java/ru/erius/lab5/util/UtilFunctions.java +++ b/Lab5Core/src/main/java/common/util/UtilFunctions.java @@ -1,4 +1,4 @@ -package ru.erius.lab5.util; +package common.util; /** * Класс функций-утилит для избавления от повторяющихся участков кода и выноса их в методы для общего пользования diff --git a/Lab5Core/src/main/resources/connection.properties b/Lab5Core/src/main/resources/connection.properties new file mode 100644 index 0000000..a1e7224 --- /dev/null +++ b/Lab5Core/src/main/resources/connection.properties @@ -0,0 +1,2 @@ +hostname=localhost +port=1234 diff --git a/Lab5Server/build.gradle.kts b/Lab5Server/build.gradle.kts new file mode 100644 index 0000000..4f26dce --- /dev/null +++ b/Lab5Server/build.gradle.kts @@ -0,0 +1,40 @@ +plugins { + java + id("com.github.johnrengelman.shadow") version("7.1.2") +} + +group = "ru.erius.lab5" +version = "2.0" +val mainClass = "server.Lab5Server" + +repositories { + mavenCentral() +} + +dependencies { + testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") + implementation(project(":Lab5Core")) +} + +tasks.getByName("test") { + useJUnitPlatform() +} + +tasks.compileJava { + options.encoding = "UTF-8" +} + +tasks.javadoc { + options.encoding = "UTF-8" +} + +tasks.shadowJar { + archiveClassifier.set("") + manifest { + attributes( + "Manifest-Version" to "1.0", + "Main-Class" to mainClass + ) + } +} diff --git a/Lab5Server/build/classes/java/main/server/Lab5Server.class b/Lab5Server/build/classes/java/main/server/Lab5Server.class new file mode 100644 index 0000000000000000000000000000000000000000..8dbd6ee38d2ed8bd7bf9e54f524d617262bae82e GIT binary patch literal 1677 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 no(=C&1ci~8m6D6S^ie?{FUdPL>bUbAOr$O}bw7 + + + + +All Classes (Lab5Server 2.0 API) + + + + +

All Classes

+ + + diff --git a/Lab5Server/build/docs/javadoc/allclasses-noframe.html b/Lab5Server/build/docs/javadoc/allclasses-noframe.html new file mode 100644 index 0000000..6446e9a --- /dev/null +++ b/Lab5Server/build/docs/javadoc/allclasses-noframe.html @@ -0,0 +1,19 @@ + + + + + +All Classes (Lab5Server 2.0 API) + + + + +

All Classes

+ + + diff --git a/Lab5Server/build/docs/javadoc/constant-values.html b/Lab5Server/build/docs/javadoc/constant-values.html new file mode 100644 index 0000000..320c4b7 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/constant-values.html @@ -0,0 +1,121 @@ + + + + + +Constant Field Values (Lab5Server 2.0 API) + + + + + + + + + + +
+

Constant Field Values

+

Contents

+
+ + + + + + diff --git a/Lab5Server/build/docs/javadoc/deprecated-list.html b/Lab5Server/build/docs/javadoc/deprecated-list.html new file mode 100644 index 0000000..e8f69c9 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/deprecated-list.html @@ -0,0 +1,121 @@ + + + + + +Deprecated List (Lab5Server 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Server/build/docs/javadoc/help-doc.html b/Lab5Server/build/docs/javadoc/help-doc.html new file mode 100644 index 0000000..11f49fd --- /dev/null +++ b/Lab5Server/build/docs/javadoc/help-doc.html @@ -0,0 +1,222 @@ + + + + + +API Help (Lab5Server 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
  • +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Server/build/docs/javadoc/index-all.html b/Lab5Server/build/docs/javadoc/index-all.html new file mode 100644 index 0000000..e10f561 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/index-all.html @@ -0,0 +1,186 @@ + + + + + +Index (Lab5Server 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
C D L M R S U  + + +

C

+
+
connect() - Method in class server.net.UDPServer
+
 
+
+ + + +

D

+
+
disconnect() - Method in class server.net.UDPServer
+
 
+
+ + + +

L

+
+
Lab5Server - Class in server
+
 
+
Lab5Server() - Constructor for class server.Lab5Server
+
 
+
logger - Static variable in class server.Lab5Server
+
 
+
+ + + +

M

+
+
main(String[]) - Static method in class server.Lab5Server
+
 
+
+ + + +

R

+
+
receive(PeopleDatabase) - Method in class server.net.UDPServer
+
 
+
+ + + +

S

+
+
send(CommandResult, InetAddress, int) - Method in class server.net.UDPServer
+
 
+
server - package server
+
 
+
server.net - package server.net
+
 
+
+ + + +

U

+
+
UDPServer - Class in server.net
+
 
+
UDPServer(int, Logger) - Constructor for class server.net.UDPServer
+
 
+
UDPServer(String, int, Logger) - Constructor for class server.net.UDPServer
+
 
+
+C D L M R S U 
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Server/build/docs/javadoc/index.html b/Lab5Server/build/docs/javadoc/index.html new file mode 100644 index 0000000..83c8a99 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/index.html @@ -0,0 +1,75 @@ + + + + + +Lab5Server 2.0 API + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/Lab5Server/build/docs/javadoc/overview-frame.html b/Lab5Server/build/docs/javadoc/overview-frame.html new file mode 100644 index 0000000..9b124f9 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/overview-frame.html @@ -0,0 +1,21 @@ + + + + + +Overview List (Lab5Server 2.0 API) + + + + + +
+

Packages

+ +
+

 

+ + diff --git a/Lab5Server/build/docs/javadoc/overview-summary.html b/Lab5Server/build/docs/javadoc/overview-summary.html new file mode 100644 index 0000000..a7b567b --- /dev/null +++ b/Lab5Server/build/docs/javadoc/overview-summary.html @@ -0,0 +1,139 @@ + + + + + +Overview (Lab5Server 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Lab5Server 2.0 API

+
+
+ + + + + + + + + + + + + + + + +
Packages 
PackageDescription
server 
server.net 
+
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Server/build/docs/javadoc/overview-tree.html b/Lab5Server/build/docs/javadoc/overview-tree.html new file mode 100644 index 0000000..aa3892e --- /dev/null +++ b/Lab5Server/build/docs/javadoc/overview-tree.html @@ -0,0 +1,136 @@ + + + + + +Class Hierarchy (Lab5Server 2.0 API) + + + + + + + +
+ + + + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + + + + + + +
+ + + + diff --git a/Lab5Server/build/docs/javadoc/package-list b/Lab5Server/build/docs/javadoc/package-list new file mode 100644 index 0000000..0941dd7 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/package-list @@ -0,0 +1,2 @@ +server +server.net diff --git a/Lab5Server/build/docs/javadoc/script.js b/Lab5Server/build/docs/javadoc/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/Lab5Server/build/docs/javadoc/server/Lab5Server.html b/Lab5Server/build/docs/javadoc/server/Lab5Server.html new file mode 100644 index 0000000..d4c6a52 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/server/Lab5Server.html @@ -0,0 +1,304 @@ + + + + + +Lab5Server (Lab5Server 2.0 API) + + + + + + + + + + + +
+
server
+

Class Lab5Server

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • server.Lab5Server
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Lab5Server
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static java.util.logging.Loggerlogger 
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Lab5Server() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static voidmain(java.lang.String[] args) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        logger

        +
        public static final java.util.logging.Logger logger
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Lab5Server

        +
        public Lab5Server()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main(java.lang.String[] args)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Server/build/docs/javadoc/server/net/UDPServer.html b/Lab5Server/build/docs/javadoc/server/net/UDPServer.html new file mode 100644 index 0000000..da32c41 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/server/net/UDPServer.html @@ -0,0 +1,329 @@ + + + + + +UDPServer (Lab5Server 2.0 API) + + + + + + + + + + + +
+
server.net
+

Class UDPServer

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • server.net.UDPServer
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class UDPServer
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      UDPServer(int port, + java.util.logging.Logger logger) 
      UDPServer(java.lang.String hostname, + int port, + java.util.logging.Logger logger) 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      booleanconnect() 
      voiddisconnect() 
      voidreceive(common.collection.PeopleDatabase peopleDatabase) 
      voidsend(common.commandline.response.CommandResult result, + java.net.InetAddress address, + int port) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UDPServer

        +
        public UDPServer(int port,
        +                 java.util.logging.Logger logger)
        +
      • +
      + + + +
        +
      • +

        UDPServer

        +
        public UDPServer(java.lang.String hostname,
        +                 int port,
        +                 java.util.logging.Logger logger)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        connect

        +
        public boolean connect()
        +
      • +
      + + + +
        +
      • +

        disconnect

        +
        public void disconnect()
        +
      • +
      + + + +
        +
      • +

        send

        +
        public void send(common.commandline.response.CommandResult result,
        +                 java.net.InetAddress address,
        +                 int port)
        +
      • +
      + + + +
        +
      • +

        receive

        +
        public void receive(common.collection.PeopleDatabase peopleDatabase)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Lab5Server/build/docs/javadoc/server/net/package-frame.html b/Lab5Server/build/docs/javadoc/server/net/package-frame.html new file mode 100644 index 0000000..80ae5bb --- /dev/null +++ b/Lab5Server/build/docs/javadoc/server/net/package-frame.html @@ -0,0 +1,19 @@ + + + + + +server.net (Lab5Server 2.0 API) + + + + +

server.net

+
+

Classes

+ +
+ + diff --git a/Lab5Server/build/docs/javadoc/server/net/package-summary.html b/Lab5Server/build/docs/javadoc/server/net/package-summary.html new file mode 100644 index 0000000..c4433f5 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/server/net/package-summary.html @@ -0,0 +1,139 @@ + + + + + +server.net (Lab5Server 2.0 API) + + + + + + + + + + +
+

Package server.net

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    UDPServer 
    +
  • +
+
+ + + + + + diff --git a/Lab5Server/build/docs/javadoc/server/net/package-tree.html b/Lab5Server/build/docs/javadoc/server/net/package-tree.html new file mode 100644 index 0000000..ea27878 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/server/net/package-tree.html @@ -0,0 +1,134 @@ + + + + + +server.net Class Hierarchy (Lab5Server 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package server.net

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object + +
  • +
+
+ + + + + + diff --git a/Lab5Server/build/docs/javadoc/server/package-frame.html b/Lab5Server/build/docs/javadoc/server/package-frame.html new file mode 100644 index 0000000..13a4e8c --- /dev/null +++ b/Lab5Server/build/docs/javadoc/server/package-frame.html @@ -0,0 +1,19 @@ + + + + + +server (Lab5Server 2.0 API) + + + + +

server

+
+

Classes

+ +
+ + diff --git a/Lab5Server/build/docs/javadoc/server/package-summary.html b/Lab5Server/build/docs/javadoc/server/package-summary.html new file mode 100644 index 0000000..65b6641 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/server/package-summary.html @@ -0,0 +1,139 @@ + + + + + +server (Lab5Server 2.0 API) + + + + + + + + + + +
+

Package server

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    Lab5Server 
    +
  • +
+
+ + + + + + diff --git a/Lab5Server/build/docs/javadoc/server/package-tree.html b/Lab5Server/build/docs/javadoc/server/package-tree.html new file mode 100644 index 0000000..644dc45 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/server/package-tree.html @@ -0,0 +1,134 @@ + + + + + +server Class Hierarchy (Lab5Server 2.0 API) + + + + + + + + + + +
+

Hierarchy For Package server

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + + + diff --git a/Lab5Server/build/docs/javadoc/stylesheet.css b/Lab5Server/build/docs/javadoc/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/Lab5Server/build/docs/javadoc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/Lab5Server/build/libs/Lab5Server-2.0.jar b/Lab5Server/build/libs/Lab5Server-2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..9d96d091406c444775b15465209cbd7fec9583f8 GIT binary patch literal 42174 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 WSH?PvxQ!Y9sfYJNm*F>}q5Ti{);CH3 literal 0 HcmV?d00001 diff --git a/Lab5Server/build/libs/connection.properties b/Lab5Server/build/libs/connection.properties new file mode 100644 index 0000000..f5630d4 --- /dev/null +++ b/Lab5Server/build/libs/connection.properties @@ -0,0 +1,2 @@ +hostname=localhost +port=1234 \ No newline at end of file diff --git a/Lab5Server/build/libs/lab5.xml b/Lab5Server/build/libs/lab5.xml new file mode 100644 index 0000000..e69de29 diff --git a/Lab5Server/build/tmp/compileJava/previous-compilation-data.bin b/Lab5Server/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..fd05344fe20a1c1b68dd329631ccea67ca72bedf GIT binary patch literal 618 zcmZQ#2xjzQ(qm?5FHS8gOD$qyXk=w*NlY?jV`u{l2(-@T{IH~gFZcVYi|3=Re{EzB z<_O?);R@x}CN-ZwP&nr%4k!5IyNXP+ADK5<^0c(|aRd7@EQF2jMQE?Fv zWf4_nXvt4ZQDbOJ%*;tmQD^9^NKP#PSq`*`fk6dKY6NIHYw2n03F$Dj7bF$|gMmet zp({Tx58_NchOVOgg4Cjt%+zAAdi@{+7YRd#_SCdQptVK}9Z)AR0-esl4pw69YN98_ zV#?4}k(yiz^jZ$kXFy4Y1|Wum1{jNjPoPuxqFrRS!ba`t^6M(rkIm%;yymO2sJ*Wi z;G5F7LHOA}4HbbZOI#APleeQ6EkKNV0iK|m@zUi>5DOl0XfD%=Ys-`$z0DO*wV*J tpP7Y~&6=S#E3qsQD9p%Uqh}jz7hvz=5bCJ!q|eL?P88N4DRz)P1^`nCukHW< literal 0 HcmV?d00001 diff --git a/Lab5Server/build/tmp/jar/MANIFEST.MF b/Lab5Server/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..3c951fd --- /dev/null +++ b/Lab5Server/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: client.Lab5Server + diff --git a/Lab5Server/build/tmp/javadoc/javadoc.options b/Lab5Server/build/tmp/javadoc/javadoc.options new file mode 100644 index 0000000..91a1614 --- /dev/null +++ b/Lab5Server/build/tmp/javadoc/javadoc.options @@ -0,0 +1,9 @@ +-classpath 'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Server\\build\\classes\\java\\main;C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Server\\build\\resources\\main;C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Core\\build\\libs\\Lab5Core-2.0.jar' +-d 'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Server\\build\\docs\\javadoc' +-doctitle 'Lab5Server 2.0 API' +-encoding 'UTF-8' +-notimestamp +-quiet +-windowtitle 'Lab5Server 2.0 API' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Server\\src\\main\\java\\server\\Lab5Server.java' +'C:\\Users\\egor\\IdeaProjects\\Lab5\\Lab5Server\\src\\main\\java\\server\\net\\UDPServer.java' diff --git a/Lab5Server/build/tmp/shadowJar/MANIFEST.MF b/Lab5Server/build/tmp/shadowJar/MANIFEST.MF new file mode 100644 index 0000000..6f371b5 --- /dev/null +++ b/Lab5Server/build/tmp/shadowJar/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: server.Lab5Server + diff --git a/Lab5Server/src/main/java/server/Lab5Server.java b/Lab5Server/src/main/java/server/Lab5Server.java new file mode 100644 index 0000000..638e203 --- /dev/null +++ b/Lab5Server/src/main/java/server/Lab5Server.java @@ -0,0 +1,27 @@ +package server; + +import common.collection.Database; +import common.collection.PeopleDatabase; +import common.parser.ConnectionProperties; +import server.net.UDPServer; + +import java.util.logging.Logger; + +public class Lab5Server { + + public final static Logger logger = Logger.getLogger("Lab5Server"); + + public static void main(String[] args) { + PeopleDatabase peopleDatabase = new PeopleDatabase(logger); + try { + peopleDatabase.load(); + } catch (Database.DatabaseLoadFailedException e) { + System.out.println(e.getMessage()); + System.exit(-1); + } + UDPServer udp = new UDPServer(ConnectionProperties.getHostname(), ConnectionProperties.getPort(), logger); + if (!udp.connect()) System.exit(-1); + while (true) + udp.receive(peopleDatabase); + } +} diff --git a/Lab5Server/src/main/java/server/net/UDPServer.java b/Lab5Server/src/main/java/server/net/UDPServer.java new file mode 100644 index 0000000..ee09deb --- /dev/null +++ b/Lab5Server/src/main/java/server/net/UDPServer.java @@ -0,0 +1,96 @@ +package server.net; + +import common.collection.PeopleDatabase; +import common.commandline.Executable; +import common.commandline.response.CommandResult; +import common.commandline.response.DefaultResponse; + +import java.io.*; +import java.net.*; +import java.util.logging.Logger; + +public class UDPServer { + + private String hostname; + private final int port; + private DatagramSocket socket; + private final Logger logger; + + public UDPServer(int port, Logger logger) { + this.port = port; + this.logger = logger; + } + + public UDPServer(String hostname, int port, Logger logger) { + this.hostname = hostname; + this.port = port; + this.logger = logger; + } + + public boolean connect() { + logger.info("Подключаемся..."); + try { + InetAddress address = hostname == null ? InetAddress.getLocalHost() : InetAddress.getByName(hostname); + socket = new DatagramSocket(port); + logger.info("Подключение установлено"); + return true; + } catch (UnknownHostException e) { + logger.severe("Хост не найден"); + return false; + } catch (SocketException e) { + logger.severe("Не удалось открыть сокет"); + return false; + } + } + + public void disconnect() { + logger.info("Разрываем соединение..."); + socket.close(); + logger.info("Соединение разорвано"); + } + + public void send(CommandResult result, InetAddress address, int port) { + byte[] buffer; + try ( + ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream) + ) { + objectOutputStream.writeObject(result); + buffer = byteOutputStream.toByteArray(); + DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, port); + socket.send(request); + } catch (IOException e) { + logger.severe("Не удалось отправить данные клиенту, неполадки в соединении"); + } + logger.info("Результат отправлен клиенту"); + } + + public void receive(PeopleDatabase peopleDatabase) { + logger.info("Ожидаем отправки данных от клиента..."); + byte[] buffer = new byte[65535]; + DatagramPacket request = new DatagramPacket(buffer, buffer.length); + CommandResult result; + try (ByteArrayInputStream byteInputStream = new ByteArrayInputStream(buffer)) { + socket.receive(request); + logger.info("Данные получены, выполняем команду..."); + ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream); + Executable command = (Executable) objectInputStream.readObject(); + Object[] args = (Object[]) objectInputStream.readObject(); + objectInputStream.close(); + if (args[0] == null) args[0] = peopleDatabase; + result = command.execute(args); + } catch (IOException e) { + logger.info("Не удалось преобразовать полученные данные, данные были повреждены во время передачи"); + result = new CommandResult(null, DefaultResponse.SERVER_ERROR); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + logger.info("Не удалось преобразовать полученные данные, классов полученных объектов не существует"); + result = new CommandResult(null, DefaultResponse.CLASS_NOT_FOUND); + } catch (ClassCastException e) { + logger.info("Не удалось преобразовать полученные данные, ожидались объекты другого типа"); + result = new CommandResult(null, DefaultResponse.TYPE_ERROR); + } + logger.info("Команда выполнена, отправляем результат клиенту..."); + send(result, request.getAddress(), request.getPort()); + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 16db861..550180a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,9 +2,8 @@ plugins { java } -group = "ru.erius" -version = "1.2" -val mainClass = "$group.${name.toLowerCase()}.$name" +group = "ru.erius.lab5" +version = "2.0" repositories { mavenCentral() @@ -13,8 +12,6 @@ repositories { dependencies { testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.2") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") - compileOnly("org.projectlombok:lombok:1.18.22") - annotationProcessor("org.projectlombok:lombok:1.18.22") } tasks.getByName("test") { @@ -22,18 +19,9 @@ tasks.getByName("test") { } tasks.compileJava { - options.encoding = "UTF-8" + options.encoding = "windows-1252" } tasks.javadoc { options.encoding = "UTF-8" } - -tasks.jar { - manifest { - attributes( - "Manifest-Version" to "1.0", - "Main-Class" to mainClass - ) - } -} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..005e033 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Dfile.encoding=UTF-8 diff --git a/lab5.xml b/lab5.xml new file mode 100644 index 0000000..e69de29 diff --git a/settings.gradle.kts b/settings.gradle.kts index 83cd3e8..99106f6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,2 +1,2 @@ rootProject.name = "Lab5" - +include("Lab5Client", "Lab5Server", "Lab5Core") diff --git a/src/main/java/ru/erius/lab5/Lab5.java b/src/main/java/ru/erius/lab5/Lab5.java deleted file mode 100644 index 7de6065..0000000 --- a/src/main/java/ru/erius/lab5/Lab5.java +++ /dev/null @@ -1,25 +0,0 @@ -package ru.erius.lab5; - -import ru.erius.lab5.collection.Database; -import ru.erius.lab5.collection.PeopleDatabase; -import ru.erius.lab5.commandline.CommandLineHandler; -import ru.erius.lab5.commandline.PeopleDatabaseCommands; - -public class Lab5 { - - public static void main(String[] args) { - CommandLineHandler cmd = CommandLineHandler.getInstance(); - - PeopleDatabaseCommands.registerDatabaseCommands(); - PeopleDatabase peopleDatabase = new PeopleDatabase(); - try { - peopleDatabase.load(); - } catch (Database.DatabaseLoadFailedException e) { - System.out.println(e.getMessage()); - System.exit(-1); - } - PeopleDatabaseCommands.setPeopleDatabase(peopleDatabase); - - cmd.start(); - } -} diff --git a/src/main/java/ru/erius/lab5/commandline/Command.java b/src/main/java/ru/erius/lab5/commandline/Command.java deleted file mode 100644 index 4690e9e..0000000 --- a/src/main/java/ru/erius/lab5/commandline/Command.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.erius.lab5.commandline; - -/** - * Функциональный интерфейс с одним методом {@link #execute(String[])}, - * используется для реализации шаблон проектирования Command - */ -@FunctionalInterface -public interface Command { - void execute(String[] args); -} diff --git a/src/main/java/ru/erius/lab5/commandline/DescriptiveCommand.java b/src/main/java/ru/erius/lab5/commandline/DescriptiveCommand.java deleted file mode 100644 index 39d2fa3..0000000 --- a/src/main/java/ru/erius/lab5/commandline/DescriptiveCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package ru.erius.lab5.commandline; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NonNull; - -/** - * Класс команд с описанием, оболочка для обычных команд, используются для корректной работы команды help - */ -@Data @AllArgsConstructor -public class DescriptiveCommand { - @NonNull - private final Command command; - private final String desc; -} diff --git a/src/main/java/ru/erius/lab5/commandline/PeopleDatabaseCommands.java b/src/main/java/ru/erius/lab5/commandline/PeopleDatabaseCommands.java deleted file mode 100644 index 36c1903..0000000 --- a/src/main/java/ru/erius/lab5/commandline/PeopleDatabaseCommands.java +++ /dev/null @@ -1,235 +0,0 @@ -package ru.erius.lab5.commandline; - -import ru.erius.lab5.collection.Database; -import ru.erius.lab5.collection.PeopleDatabase; -import ru.erius.lab5.data.*; -import ru.erius.lab5.util.UtilFunctions; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Locale; -import java.util.Optional; - -import static ru.erius.lab5.commandline.CommandRegistry.*; - -/** - * Класс объявления всех команд, связанных с манипуляциями над объектом класса PeopleDatabase - * - * @see PeopleDatabase - */ -public final class PeopleDatabaseCommands { - - private static PeopleDatabase peopleDatabase; - private static final String COLORS = Arrays.toString(Color.values()), - COUNTRIES = Arrays.toString(Country.values()); - private static final CommandLineHandler CMD = CommandLineHandler.getInstance(); - - private PeopleDatabaseCommands() {} - - /** - * Метод добавления всех команд в регистр команд, обязательно вызывайте его в своей программе, - * если вам требуются данные команды - */ - public static void registerDatabaseCommands() { - registerCommand("info", args -> info(peopleDatabase), - "info : вывести в стандартный поток вывода информацию о коллекции (тип, дата инициализации, количество элементов и т.д.)"); - registerCommand("show", args -> show(peopleDatabase), - "show : вывести в стандартный поток вывода все элементы коллекции в строковом представлении"); - registerCommand("add", args -> add(peopleDatabase), - "add : добавить новый элемент в коллекцию"); - registerCommand("update", args -> update(peopleDatabase, args), - "update {id} : обновить значение элемента коллекции, {id} которого равен заданному"); - registerCommand("remove_by_id", args -> remove(peopleDatabase, args), - "remove_by_id {id} : удалить элемент из коллекции по его {id}"); - registerCommand("clear", args -> clear(peopleDatabase), - "clear : очистить коллекцию"); - registerCommand("save", args -> save(peopleDatabase), - "save : сохранить коллекцию в файл"); - registerCommand("add_if_max", args -> addIfMax(peopleDatabase), - "add_if_max : добавить новый элемент в коллекцию, если его значение превышает значение наибольшего элемента этой коллекции"); - registerCommand("add_if_min", args -> addIfMin(peopleDatabase), - "add_if_min : добавить новый элемент в коллекцию, если его значение меньше, чем у наименьшего элемента этой коллекции"); - registerCommand("sum_of_height", args -> sumOfHeight(peopleDatabase), - "sum_of_height : вывести сумму значений поля height для всех элементов коллекции"); - registerCommand("filter_contains_name", args -> filterContainsName(peopleDatabase, args), - "filter_contains_name {name} : вывести элементы, значение поля name которых содержит заданную подстроку"); - registerCommand("print_field_descending_location", args -> printFieldDescendingLocation(peopleDatabase), - "print_field_descending_location : вывести значения поля location всех элементов в порядке убывания"); - } - - public static void setPeopleDatabase(PeopleDatabase peopleDatabase) { - PeopleDatabaseCommands.peopleDatabase = peopleDatabase; - } - - public static void info(PeopleDatabase peopleDatabase) { - System.out.println(peopleDatabase.info()); - } - - public static void show(PeopleDatabase peopleDatabase) { - System.out.println("Элементы коллекции:\n"); - peopleDatabase.getCollection().forEach(p -> System.out.println(p.formatted())); - } - - public static void add(PeopleDatabase peopleDatabase) { - Person person = createPerson(); - boolean success = peopleDatabase.getCollection().add(person); - System.out.println(success ? "Человек успешно добавлен в коллекцию" : "Не удалось добавить человека в коллекцию"); - } - - public static void update(PeopleDatabase peopleDatabase, String[] args) { - Long id = getIdOrNull(args); - if (id == null) return; - - Optional optionalPerson = peopleDatabase.getCollection() - .stream() - .filter(p -> p.getId().equals(id)) - .findFirst(); - if (!optionalPerson.isPresent()) { - System.out.println("Человек с {id} " + id + " не был найден"); - return; - } - Person oldPerson = optionalPerson.get(); - peopleDatabase.getCollection().remove(oldPerson); - - Person newPerson = createPerson(); - oldPerson.update(newPerson); - peopleDatabase.getCollection().add(oldPerson); - System.out.println("Человек с {id} " + oldPerson.getId() + " был успешно изменен"); - } - - public static void remove(PeopleDatabase peopleDatabase, String[] args) { - Long id = getIdOrNull(args); - if (id == null) return; - boolean success = peopleDatabase.getCollection().removeIf(p -> p.getId().equals(id)); - System.out.println("Человек с {id} " + id + " " + (success ? "был успешно удален" : "не был найден")); - } - - public static void clear(PeopleDatabase peopleDatabase) { - peopleDatabase.getCollection().clear(); - System.out.println("Коллекция была очищена"); - } - - public static void save(PeopleDatabase peopleDatabase) { - try { - peopleDatabase.save(); - System.out.println("Коллекция была успешно сохранена"); - } catch (Database.DatabaseSaveFailedException e) { - System.out.println(e.getMessage()); - } - } - - public static void addIfMax(PeopleDatabase peopleDatabase) { - Person person = createPerson(); - Person last = peopleDatabase.getCollection().last(); - if (person.compareTo(last) > 0) { - peopleDatabase.getCollection().add(person); - System.out.println("Человек успешно добавлен в коллекцию"); - return; - } - System.out.println("Не удалось добавить человека в коллекцию"); - } - - public static void addIfMin(PeopleDatabase peopleDatabase) { - Person person = createPerson(); - Person first = peopleDatabase.getCollection().first(); - if (person.compareTo(first) < 0) { - peopleDatabase.getCollection().add(person); - System.out.println("Человек успешно добавлен в коллекцию"); - return; - } - System.out.println("Не удалось добавить человека в коллекцию"); - } - - public static void sumOfHeight(PeopleDatabase peopleDatabase) { - int sum = peopleDatabase.getCollection() - .stream() - .mapToInt(p -> p.getHeight() == null ? 0 : p.getHeight()) - .sum(); - System.out.println("Сумма ростов всех людей в коллекции - " + sum); - } - - public static void filterContainsName(PeopleDatabase peopleDatabase, String[] args) { - if (args.length < 1) { - System.out.println("Недостаточно данных"); - return; - } - - String name = args[0]; - System.out.println("Список людей, в имени которых содержится " + name + ":"); - peopleDatabase.getCollection() - .stream() - .filter(p -> p.getName().contains(name)) - .forEach(System.out::println); - } - - public static void printFieldDescendingLocation(PeopleDatabase peopleDatabase) { - System.out.println("Список локаций в порядке убывания"); - peopleDatabase.getCollection() - .stream() - .map(Person::getLocation) - .sorted(Collections.reverseOrder()) - .forEach(System.out::println); - } - - private static Long getIdOrNull(String[] args) { - if (args.length < 1) { - System.out.println("Недостаточно данных"); - return null; - } - - Long id = UtilFunctions.longOrNull(args[0]); - if (id == null) { - System.out.println("{id} должен быть целым числом"); - return null; - } - - return id; - } - - public static Person createPerson() { - System.out.println("Создание нового объекта класса Person"); - String name = CMD.awaitInput("Введите имя:", "Введите непустую строку", - input -> !input.isEmpty()); - Integer height = CMD.awaitInput("Введите рост:", "Введите целое число, большее нуля", - input -> { - Integer result = UtilFunctions.intOrNull(input); - return result != null && result > 0 || input.isEmpty(); - }, input -> input.isEmpty() ? null : Integer.parseInt(input)); - String passportID = CMD.awaitInput("Введите номер паспорта:", "Введите минимум 8 символов", - input -> input.length() >= 8 || input.isEmpty(), input -> input.isEmpty() ? null : input); - Color eyeColor = CMD.awaitInput("Введите цвет глаз " + COLORS + ":", "Введите один из предложенных цветов", - input -> UtilFunctions.enumOrNull(input.toUpperCase(Locale.ROOT), Color.class) != null, - input -> Color.valueOf(input.toUpperCase(Locale.ROOT))); - Country nationality = CMD.awaitInput("Введите национальность " + COUNTRIES + ":", "Введите одну из предложенных стран", - input -> UtilFunctions.enumOrNull(input.toUpperCase(Locale.ROOT), Country.class) != null, - input -> Country.valueOf(input.toUpperCase(Locale.ROOT))); - Location location = createLocation(); - Coordinates coordinates = createCoordinates(); - return new Person(name, coordinates, height, passportID, eyeColor, nationality, location); - } - - public static Location createLocation() { - System.out.println("Создание нового объекта класса Location"); - double x = CMD.awaitInput("Введите x:", "Введите дробное число", - input -> UtilFunctions.doubleOrNull(input) != null, Double::parseDouble); - float y = CMD.awaitInput("Введите y:", "Введите дробное число", - input -> UtilFunctions.floatOrNull(input) != null, Float::parseFloat); - long z = CMD.awaitInput("Введите z:", "Введите целое число", - input -> UtilFunctions.longOrNull(input) != null, Long::parseLong); - String name = CMD.awaitInput("Введите название:", "Строка не может быть пустой", - input -> true, input -> input.isEmpty() ? null : input); - return new Location(x, y, z, name); - } - - public static Coordinates createCoordinates() { - System.out.println("Создание нового объекта класса Coordinates"); - float x = CMD.awaitInput("Введите x:", "Введите дробное число", - input -> UtilFunctions.floatOrNull(input) != null, Float::parseFloat); - float y = CMD.awaitInput("Введите y:", "Введите дробное число, большее -816", - input -> { - Float result = UtilFunctions.floatOrNull(input); - return result != null && result > -816F; - }, Float::parseFloat); - return new Coordinates(x, y); - } -} diff --git a/src/main/java/ru/erius/lab5/data/Color.java b/src/main/java/ru/erius/lab5/data/Color.java deleted file mode 100644 index 3576102..0000000 --- a/src/main/java/ru/erius/lab5/data/Color.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.erius.lab5.data; - -/** - * Перечисление цветов - */ -public enum Color { - BLACK, - ORANGE, - BROWN -}