diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000000000000000000000000000000000000..5e4e624951e499268d9eb4bf62f0dd0c73bb4c8f --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,517 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="DBNavigator.Project.DataEditorManager"> + <record-view-column-sorting-type value="BY_INDEX" /> + <value-preview-text-wrapping value="false" /> + <value-preview-pinned value="false" /> + </component> + <component name="DBNavigator.Project.DatabaseConsoleManager"> + <connection id="a5e69d11-9989-46c6-9a39-631e86083808"> + <console name="Chinook" type="STANDARD" schema="" session="Main" /> + </connection> + </component> + <component name="DBNavigator.Project.DatabaseEditorStateManager"> + <last-used-providers /> + </component> + <component name="DBNavigator.Project.DatabaseFileManager"> + <open-files /> + </component> + <component name="DBNavigator.Project.ObjectQuickFilterManager"> + <last-used-operator value="EQUAL" /> + <filters /> + </component> + <component name="DBNavigator.Project.Settings"> + <connections> + <connection id="a5e69d11-9989-46c6-9a39-631e86083808" active="true" signed="true"> + <database> + <name value="Chinook" /> + <description value="" /> + <database-type value="SQLITE" /> + <config-type value="BASIC" /> + <database-version value="9999.0" /> + <driver-source value="BUILTIN" /> + <driver-library value="" /> + <driver value="" /> + <url-type value="FILE" /> + <host value="" /> + <port value="" /> + <database value="" /> + <files> + <file path="chinook.db" schema="main" /> + </files> + <type value="NONE" /> + <user value="" /> + <deprecated-pwd value="" /> + </database> + <properties> + <auto-commit value="false" /> + </properties> + <ssh-settings> + <active value="false" /> + <proxy-host value="" /> + <proxy-port value="22" /> + <proxy-user value="" /> + <deprecated-proxy-pwd value="" /> + <auth-type value="PASSWORD" /> + <key-file value="" /> + <key-passphrase value="" /> + </ssh-settings> + <ssl-settings> + <active value="false" /> + <certificate-authority-file value="" /> + <client-certificate-file value="" /> + <client-key-file value="" /> + </ssl-settings> + <details> + <charset value="UTF-8" /> + <session-management value="true" /> + <ddl-file-binding value="true" /> + <database-logging value="true" /> + <connect-automatically value="true" /> + <restore-workspace value="true" /> + <restore-workspace-deep value="false" /> + <environment-type value="default" /> + <connectivity-timeout value="10" /> + <idle-time-to-disconnect value="30" /> + <idle-time-to-disconnect-pool value="5" /> + <credential-expiry-time value="10" /> + <max-connection-pool-size value="7" /> + <alternative-statement-delimiter value="" /> + </details> + <object-filters hide-empty-schemas="false" hide-pseudo-columns="false"> + <object-type-filter> + <object-type name="SCHEMA" enabled="true" /> + <object-type name="USER" enabled="true" /> + <object-type name="ROLE" enabled="true" /> + <object-type name="PRIVILEGE" enabled="true" /> + <object-type name="CHARSET" enabled="true" /> + <object-type name="TABLE" enabled="true" /> + <object-type name="VIEW" enabled="true" /> + <object-type name="MATERIALIZED_VIEW" enabled="true" /> + <object-type name="NESTED_TABLE" enabled="true" /> + <object-type name="COLUMN" enabled="true" /> + <object-type name="INDEX" enabled="true" /> + <object-type name="CONSTRAINT" enabled="true" /> + <object-type name="DATASET_TRIGGER" enabled="true" /> + <object-type name="DATABASE_TRIGGER" enabled="true" /> + <object-type name="SYNONYM" enabled="true" /> + <object-type name="SEQUENCE" enabled="true" /> + <object-type name="PROCEDURE" enabled="true" /> + <object-type name="FUNCTION" enabled="true" /> + <object-type name="PACKAGE" enabled="true" /> + <object-type name="TYPE" enabled="true" /> + <object-type name="TYPE_ATTRIBUTE" enabled="true" /> + <object-type name="ARGUMENT" enabled="true" /> + <object-type name="DIMENSION" enabled="true" /> + <object-type name="CLUSTER" enabled="true" /> + <object-type name="DBLINK" enabled="true" /> + </object-type-filter> + <object-name-filters /> + </object-filters> + </connection> + </connections> + <browser-settings> + <general> + <display-mode value="TABBED" /> + <navigation-history-size value="100" /> + <show-object-details value="false" /> + </general> + <filters> + <object-type-filter> + <object-type name="SCHEMA" enabled="true" /> + <object-type name="USER" enabled="true" /> + <object-type name="ROLE" enabled="true" /> + <object-type name="PRIVILEGE" enabled="true" /> + <object-type name="CHARSET" enabled="true" /> + <object-type name="TABLE" enabled="true" /> + <object-type name="VIEW" enabled="true" /> + <object-type name="MATERIALIZED_VIEW" enabled="true" /> + <object-type name="NESTED_TABLE" enabled="true" /> + <object-type name="COLUMN" enabled="true" /> + <object-type name="INDEX" enabled="true" /> + <object-type name="CONSTRAINT" enabled="true" /> + <object-type name="DATASET_TRIGGER" enabled="true" /> + <object-type name="DATABASE_TRIGGER" enabled="true" /> + <object-type name="SYNONYM" enabled="true" /> + <object-type name="SEQUENCE" enabled="true" /> + <object-type name="PROCEDURE" enabled="true" /> + <object-type name="FUNCTION" enabled="true" /> + <object-type name="PACKAGE" enabled="true" /> + <object-type name="TYPE" enabled="true" /> + <object-type name="TYPE_ATTRIBUTE" enabled="true" /> + <object-type name="ARGUMENT" enabled="true" /> + <object-type name="DIMENSION" enabled="true" /> + <object-type name="CLUSTER" enabled="true" /> + <object-type name="DBLINK" enabled="true" /> + </object-type-filter> + </filters> + <sorting> + <object-type name="COLUMN" sorting-type="NAME" /> + <object-type name="FUNCTION" sorting-type="NAME" /> + <object-type name="PROCEDURE" sorting-type="NAME" /> + <object-type name="ARGUMENT" sorting-type="POSITION" /> + <object-type name="TYPE ATTRIBUTE" sorting-type="POSITION" /> + </sorting> + <default-editors> + <object-type name="VIEW" editor-type="SELECTION" /> + <object-type name="PACKAGE" editor-type="SELECTION" /> + <object-type name="TYPE" editor-type="SELECTION" /> + </default-editors> + </browser-settings> + <navigation-settings> + <lookup-filters> + <lookup-objects> + <object-type name="SCHEMA" enabled="true" /> + <object-type name="USER" enabled="false" /> + <object-type name="ROLE" enabled="false" /> + <object-type name="PRIVILEGE" enabled="false" /> + <object-type name="CHARSET" enabled="false" /> + <object-type name="TABLE" enabled="true" /> + <object-type name="VIEW" enabled="true" /> + <object-type name="MATERIALIZED VIEW" enabled="true" /> + <object-type name="INDEX" enabled="true" /> + <object-type name="CONSTRAINT" enabled="true" /> + <object-type name="DATASET TRIGGER" enabled="true" /> + <object-type name="DATABASE TRIGGER" enabled="true" /> + <object-type name="SYNONYM" enabled="false" /> + <object-type name="SEQUENCE" enabled="true" /> + <object-type name="PROCEDURE" enabled="true" /> + <object-type name="FUNCTION" enabled="true" /> + <object-type name="PACKAGE" enabled="true" /> + <object-type name="TYPE" enabled="true" /> + <object-type name="DIMENSION" enabled="false" /> + <object-type name="CLUSTER" enabled="false" /> + <object-type name="DBLINK" enabled="true" /> + </lookup-objects> + <force-database-load value="false" /> + <prompt-connection-selection value="true" /> + <prompt-schema-selection value="true" /> + </lookup-filters> + </navigation-settings> + <dataset-grid-settings> + <general> + <enable-zooming value="true" /> + <enable-column-tooltip value="true" /> + </general> + <sorting> + <nulls-first value="true" /> + <max-sorting-columns value="4" /> + </sorting> + <audit-columns> + <column-names value="" /> + <visible value="true" /> + <editable value="false" /> + </audit-columns> + </dataset-grid-settings> + <dataset-editor-settings> + <text-editor-popup> + <active value="false" /> + <active-if-empty value="false" /> + <data-length-threshold value="100" /> + <popup-delay value="1000" /> + </text-editor-popup> + <values-actions-popup> + <show-popup-button value="true" /> + <element-count-threshold value="1000" /> + <data-length-threshold value="250" /> + </values-actions-popup> + <general> + <fetch-block-size value="100" /> + <fetch-timeout value="30" /> + <trim-whitespaces value="true" /> + <convert-empty-strings-to-null value="true" /> + <select-content-on-cell-edit value="true" /> + <large-value-preview-active value="true" /> + </general> + <filters> + <prompt-filter-dialog value="true" /> + <default-filter-type value="BASIC" /> + </filters> + <qualified-text-editor text-length-threshold="300"> + <content-types> + <content-type name="Text" enabled="true" /> + <content-type name="Properties" enabled="true" /> + <content-type name="XML" enabled="true" /> + <content-type name="DTD" enabled="true" /> + <content-type name="HTML" enabled="true" /> + <content-type name="XHTML" enabled="true" /> + <content-type name="CSS" enabled="true" /> + <content-type name="Java" enabled="true" /> + <content-type name="SQL" enabled="true" /> + <content-type name="PL/SQL" enabled="true" /> + <content-type name="JavaScript" enabled="true" /> + <content-type name="JSON" enabled="true" /> + <content-type name="JSON5" enabled="true" /> + <content-type name="JSP" enabled="true" /> + <content-type name="JSPx" enabled="true" /> + <content-type name="Groovy" enabled="true" /> + <content-type name="FTL" enabled="true" /> + <content-type name="VTL" enabled="true" /> + <content-type name="AIDL" enabled="true" /> + <content-type name="YAML" enabled="true" /> + <content-type name="Manifest" enabled="true" /> + </content-types> + </qualified-text-editor> + <record-navigation> + <navigation-target value="VIEWER" /> + </record-navigation> + </dataset-editor-settings> + <code-editor-settings> + <general> + <show-object-navigation-gutter value="false" /> + <show-spec-declaration-navigation-gutter value="true" /> + <enable-spellchecking value="true" /> + <enable-reference-spellchecking value="false" /> + </general> + <confirmations> + <save-changes value="false" /> + <revert-changes value="true" /> + </confirmations> + </code-editor-settings> + <code-completion-settings> + <filters> + <basic-filter> + <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> + <filter-element type="RESERVED_WORD" id="function" selected="true" /> + <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> + <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> + <filter-element type="RESERVED_WORD" id="exception" selected="true" /> + <filter-element type="OBJECT" id="schema" selected="true" /> + <filter-element type="OBJECT" id="role" selected="true" /> + <filter-element type="OBJECT" id="user" selected="true" /> + <filter-element type="OBJECT" id="privilege" selected="true" /> + <user-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="false" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </user-schema> + <public-schema> + <filter-element type="OBJECT" id="table" selected="false" /> + <filter-element type="OBJECT" id="view" selected="false" /> + <filter-element type="OBJECT" id="materialized view" selected="false" /> + <filter-element type="OBJECT" id="index" selected="false" /> + <filter-element type="OBJECT" id="constraint" selected="false" /> + <filter-element type="OBJECT" id="trigger" selected="false" /> + <filter-element type="OBJECT" id="synonym" selected="false" /> + <filter-element type="OBJECT" id="sequence" selected="false" /> + <filter-element type="OBJECT" id="procedure" selected="false" /> + <filter-element type="OBJECT" id="function" selected="false" /> + <filter-element type="OBJECT" id="package" selected="false" /> + <filter-element type="OBJECT" id="type" selected="false" /> + <filter-element type="OBJECT" id="dimension" selected="false" /> + <filter-element type="OBJECT" id="cluster" selected="false" /> + <filter-element type="OBJECT" id="dblink" selected="false" /> + </public-schema> + <any-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </any-schema> + </basic-filter> + <extended-filter> + <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> + <filter-element type="RESERVED_WORD" id="function" selected="true" /> + <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> + <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> + <filter-element type="RESERVED_WORD" id="exception" selected="true" /> + <filter-element type="OBJECT" id="schema" selected="true" /> + <filter-element type="OBJECT" id="user" selected="true" /> + <filter-element type="OBJECT" id="role" selected="true" /> + <filter-element type="OBJECT" id="privilege" selected="true" /> + <user-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </user-schema> + <public-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </public-schema> + <any-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </any-schema> + </extended-filter> + </filters> + <sorting enabled="true"> + <sorting-element type="RESERVED_WORD" id="keyword" /> + <sorting-element type="RESERVED_WORD" id="datatype" /> + <sorting-element type="OBJECT" id="column" /> + <sorting-element type="OBJECT" id="table" /> + <sorting-element type="OBJECT" id="view" /> + <sorting-element type="OBJECT" id="materialized view" /> + <sorting-element type="OBJECT" id="index" /> + <sorting-element type="OBJECT" id="constraint" /> + <sorting-element type="OBJECT" id="trigger" /> + <sorting-element type="OBJECT" id="synonym" /> + <sorting-element type="OBJECT" id="sequence" /> + <sorting-element type="OBJECT" id="procedure" /> + <sorting-element type="OBJECT" id="function" /> + <sorting-element type="OBJECT" id="package" /> + <sorting-element type="OBJECT" id="type" /> + <sorting-element type="OBJECT" id="dimension" /> + <sorting-element type="OBJECT" id="cluster" /> + <sorting-element type="OBJECT" id="dblink" /> + <sorting-element type="OBJECT" id="schema" /> + <sorting-element type="OBJECT" id="role" /> + <sorting-element type="OBJECT" id="user" /> + <sorting-element type="RESERVED_WORD" id="function" /> + <sorting-element type="RESERVED_WORD" id="parameter" /> + </sorting> + <format> + <enforce-code-style-case value="true" /> + </format> + </code-completion-settings> + <execution-engine-settings> + <statement-execution> + <fetch-block-size value="100" /> + <execution-timeout value="20" /> + <debug-execution-timeout value="600" /> + <focus-result value="false" /> + <prompt-execution value="false" /> + </statement-execution> + <script-execution> + <command-line-interfaces /> + <execution-timeout value="300" /> + </script-execution> + <method-execution> + <execution-timeout value="30" /> + <debug-execution-timeout value="600" /> + <parameter-history-size value="10" /> + </method-execution> + </execution-engine-settings> + <operation-settings> + <transactions> + <uncommitted-changes> + <on-project-close value="ASK" /> + <on-disconnect value="ASK" /> + <on-autocommit-toggle value="ASK" /> + </uncommitted-changes> + <multiple-uncommitted-changes> + <on-commit value="ASK" /> + <on-rollback value="ASK" /> + </multiple-uncommitted-changes> + </transactions> + <session-browser> + <disconnect-session value="ASK" /> + <kill-session value="ASK" /> + <reload-on-filter-change value="false" /> + </session-browser> + <compiler> + <compile-type value="KEEP" /> + <compile-dependencies value="ASK" /> + <always-show-controls value="false" /> + </compiler> + <debugger> + <debugger-type value="ASK" /> + <use-generic-runners value="true" /> + </debugger> + </operation-settings> + <ddl-file-settings> + <extensions> + <mapping file-type-id="VIEW" extensions="vw" /> + <mapping file-type-id="TRIGGER" extensions="trg" /> + <mapping file-type-id="PROCEDURE" extensions="prc" /> + <mapping file-type-id="FUNCTION" extensions="fnc" /> + <mapping file-type-id="PACKAGE" extensions="pkg" /> + <mapping file-type-id="PACKAGE_SPEC" extensions="pks" /> + <mapping file-type-id="PACKAGE_BODY" extensions="pkb" /> + <mapping file-type-id="TYPE" extensions="tpe" /> + <mapping file-type-id="TYPE_SPEC" extensions="tps" /> + <mapping file-type-id="TYPE_BODY" extensions="tpb" /> + </extensions> + <general> + <lookup-ddl-files value="true" /> + <create-ddl-files value="false" /> + <synchronize-ddl-files value="true" /> + <use-qualified-names value="false" /> + <make-scripts-rerunnable value="true" /> + </general> + </ddl-file-settings> + <general-settings> + <regional-settings> + <date-format value="MEDIUM" /> + <number-format value="UNGROUPED" /> + <locale value="SYSTEM_DEFAULT" /> + <use-custom-formats value="false" /> + </regional-settings> + <environment> + <environment-types> + <environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" /> + <environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" /> + <environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" /> + <environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" /> + </environment-types> + <visibility-settings> + <connection-tabs value="true" /> + <dialog-headers value="true" /> + <object-editor-tabs value="true" /> + <script-editor-tabs value="false" /> + <execution-result-tabs value="true" /> + </visibility-settings> + </environment> + </general-settings> + </component> +</project> \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d825ad6c20b5b4a90ba23cfe17c3a6c55775a21f..742802af0bb4192ecb63ae552c4cf3322d879517 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,7 +13,6 @@ <option value="$PROJECT_DIR$/app" /> <option value="$PROJECT_DIR$/buildSrc" /> <option value="$PROJECT_DIR$/console" /> - <option value="$PROJECT_DIR$/list" /> <option value="$PROJECT_DIR$/utilities" /> </set> </option> diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 7e340a776a6a2b978d333a4d2815fa12ccacbd91..568bea16e29e4d31c02a8e1576e7fb23830a84ed 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="KotlinJpsPluginSettings"> - <option name="version" value="1.6.21" /> + <option name="version" value="1.6.20" /> </component> </project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 58784cb31c8456051a7c8f34b800f30e88bec72c..f471db5a70dfe8b579890bbd44a3263824bde797 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,4 +8,4 @@ <component name="SuppressKotlinCodeStyleNotification"> <option name="disableForAll" value="true" /> </component> -</project> \ No newline at end of file +</project> diff --git a/app/build.gradle b/app/build.gradle index 840aa75f42249103a31becad6046c1888ab19a28..e291f901ef3e674547a00ea8977ea582e634a405 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,9 +4,20 @@ plugins { id 'notes.multi.kotlin-application-conventions' + id 'notes.multi.kotlin-library-conventions' + id 'application' + id 'org.jetbrains.kotlin.jvm' + id 'org.openjfx.javafxplugin' version '0.0.13' +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } dependencies { + implementation group: 'org.fxmisc.richtext', name: 'richtextfx', version: '0.11.0' implementation 'org.apache.commons:commons-text' implementation project(':utilities') testImplementation 'org.jetbrains.kotlin:kotlin-test' @@ -17,6 +28,11 @@ application { mainClass = 'notes.multi.app.AppKt' } +javafx { + version = '18.0.2' + modules = ['javafx.controls', 'javafx.graphics', 'javafx.web'] +} + test { useJUnitPlatform() } diff --git a/app/src/main/kotlin/notes/multi/app/App.kt b/app/src/main/kotlin/notes/multi/app/App.kt index 9d9016fffc7c2e54d5ae00b975a616f45dc6f35a..4fdf0891b43b35528680670ee2c82bafa1429231 100644 --- a/app/src/main/kotlin/notes/multi/app/App.kt +++ b/app/src/main/kotlin/notes/multi/app/App.kt @@ -3,12 +3,5 @@ */ package notes.multi.app -import notes.multi.utilities.StringUtils - -import org.apache.commons.text.WordUtils - fun main() { - val tokens = StringUtils.split(MessageUtils.getMessage()) - val result = StringUtils.join(tokens) - println(WordUtils.capitalize(result)) } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 2aa0c8482afc566c889590c21de58059004c5a99..71eb07496f744794cc543b32879b5ae744ab6eb7 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -14,5 +14,5 @@ repositories { } dependencies { - implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31' + implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20' } diff --git a/console/build.gradle b/console/build.gradle index c32e5dfcae2acbfa480e1943db2dbe92317bc277..60c19ab75f77ac4f5b792ca036d85300041fb46d 100644 --- a/console/build.gradle +++ b/console/build.gradle @@ -9,15 +9,32 @@ plugins { id 'org.openjfx.javafxplugin' version '0.0.13' } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + javafx { version = '18.0.2' - modules = ['javafx.controls', 'javafx.graphics'] + modules = ['javafx.controls', 'javafx.graphics', 'javafx.web'] +} + +repositories { + mavenCentral() } dependencies { implementation 'org.apache.commons:commons-text' implementation project(':utilities') testImplementation 'org.jetbrains.kotlin:kotlin-test' + implementation 'org.xerial:sqlite-jdbc:3.30.1' + + implementation("org.slf4j:slf4j-simple:1.6.1") + + implementation("org.jetbrains.exposed:exposed-core:$exposedVersion") + implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion") + implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") } application { @@ -28,3 +45,9 @@ application { test { useJUnitPlatform() } + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} \ No newline at end of file diff --git a/console/chinook.db b/console/chinook.db new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/console/gradle.properties b/console/gradle.properties new file mode 100644 index 0000000000000000000000000000000000000000..a761c5c43b5ad0d4d1b42fcdb00d449e7e7dbbce --- /dev/null +++ b/console/gradle.properties @@ -0,0 +1 @@ +exposedVersion=0.38.2 \ No newline at end of file diff --git a/console/src/main/kotlin/notes/multi/console/Console.kt b/console/src/main/kotlin/notes/multi/console/Console.kt index ac379c645634acbe614e482af458666db05babf1..0799589f72f219594d985365024451e40e5c3bed 100644 --- a/console/src/main/kotlin/notes/multi/console/Console.kt +++ b/console/src/main/kotlin/notes/multi/console/Console.kt @@ -7,8 +7,16 @@ import java.lang.IllegalArgumentException import notes.multi.utilities.TextWindow import javafx.application.Application +import notes.multi.utilities.DatabaseOperations +import notes.multi.utilities.DatabaseOperations.CRUD.getAllNotes +import notes.multi.utilities.Note +import org.jetbrains.exposed.dao.id.EntityID +import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.transactions.transaction import kotlin.io.path.Path import java.io.File +import java.time.LocalDate +import java.time.LocalDateTime fun main(args: Array<String>) { @@ -46,31 +54,71 @@ fun main(args: Array<String>) { +-------------------------------------------------------------------------------------+ """.trimIndent() ) + Database.connect("jdbc:sqlite:test.db") + + transaction { + // print sql to std-out + // addLogger(StdOutSqlLogger) + + // create a table that reflects the Cities class structure + SchemaUtils.create(DatabaseOperations.Notes) + + val query = DatabaseOperations.Notes.selectAll() + query.forEach { + println(it[DatabaseOperations.Notes.id].toString() + " | " + it[DatabaseOperations.Notes.title]) + } + } } else { if (args.size < 2) { - /** - * File Path (can be relative or absolute) - */ - val filePathArg = args[0] + // /** + // * File Path (can be relative or absolute) + // */ + // val filePathArg = args[0] + // + // /** + // * Title of the file + // */ + // val fileTitle = Path(filePathArg).fileName + // + // /** + // * Location of the file as text + // */ + // val fileLocation = Path(filePathArg).parent ?: System.getProperty("user.dir") + // + // if (!File(fileLocation.toString()).isDirectory) throw IllegalArgumentException("[ERROR]: Directory does not exist!") - /** - * Title of the file - */ - val fileTitle = Path(filePathArg).fileName + // Regex Check for a specific argument format: + // ConsoleUtils.verifyFilename(fileTitle.toString(), Regex("^.*[.]([Mm][Dd]|[Tt][Xx][Tt])$")) - /** - * Location of the file as text - */ - val fileLocation = Path(filePathArg).parent ?: System.getProperty("user.dir") - if (!File(fileLocation.toString()).isDirectory) throw IllegalArgumentException("[ERROR]: Directory does not exist!") + val fileTitle = args[0] + var fileText: String = "" + Database.connect("jdbc:sqlite:test.db") - // Regex Check for a specific argument format: - ConsoleUtils.verifyFilename(fileTitle.toString(), Regex("^.*[.]([Mm][Dd]|[Tt][Xx][Tt])$")) + var noteExists = false + var noteText: String? = "" + var noteId: String = "-1" + + transaction { + // print sql to std-out + // addLogger(StdOutSqlLogger) + + // create a table that reflects the Cities class structure + SchemaUtils.create(DatabaseOperations.Notes) - // Passing the location and title as params to TextWindow - Application.launch(TextWindow()::class.java, "--title=${fileTitle}", "--location=${fileLocation}") + val query = DatabaseOperations.Notes.selectAll() + query.forEach { + if (it[DatabaseOperations.Notes.title] == fileTitle) { + noteExists = true + noteText = it[DatabaseOperations.Notes.text] + noteId = it[DatabaseOperations.Notes.id].toString() + } + } + } + + // Passing the location and title as params to TextWindow + Application.launch(TextWindow()::class.java, "--title=$fileTitle", "--text=$noteText", "--id=$noteId") } else { throw IllegalArgumentException("[ERROR]: Wrong number of arguments provided!") } diff --git a/console/src/test/kotlin/notes/multi/app/ConsoleUtilsTest.kt b/console/src/test/kotlin/notes/multi/app/ConsoleUtilsTest.kt index c82975f9bc13d46389eadb34aadce7750b3095af..96d939a0727334a14a64c7a6e43784e1ae76bf96 100644 --- a/console/src/test/kotlin/notes/multi/app/ConsoleUtilsTest.kt +++ b/console/src/test/kotlin/notes/multi/app/ConsoleUtilsTest.kt @@ -17,10 +17,7 @@ class ConsoleUtilsTest { var n = Note( title = "NeverGonnaGiveYouUp", text = StringBuffer(""), - author = "Rick Astley", - extension = "txt", - lastModified = LocalDateTime.now(), - location = "." + lastModified = LocalDateTime.now().toString(), ) diff --git a/console/test.db b/console/test.db new file mode 100644 index 0000000000000000000000000000000000000000..9f2636cb42690853c06a9c00dc8639184e2ef377 Binary files /dev/null and b/console/test.db differ diff --git a/console/test.txt b/console/test.txt new file mode 100644 index 0000000000000000000000000000000000000000..d48fee9b7262d50bf626c15165d11cee2184745b --- /dev/null +++ b/console/test.txt @@ -0,0 +1 @@ +<html dir="ltr"><head></head><body contenteditable="true"><p><span style="font-family: "";">Abhay Test! 123<br></span><p><span style="font-family: "";">Hopefully this works! :D</span></p></p></body></html> \ No newline at end of file diff --git a/console/test/asdasd.txt b/console/test/asdasd.txt new file mode 100644 index 0000000000000000000000000000000000000000..70a7416b25fe65127d78038704a7ec968ba8bb37 --- /dev/null +++ b/console/test/asdasd.txt @@ -0,0 +1 @@ +<html dir="ltr"><head></head><body contenteditable="true"><p><span style="font-family: "";">ASasAS</span></p></body></html> \ No newline at end of file diff --git a/console/test/test.txt b/console/test/test.txt new file mode 100644 index 0000000000000000000000000000000000000000..9940c32f4b09c19edca63637b8ec91e04a1f211b --- /dev/null +++ b/console/test/test.txt @@ -0,0 +1 @@ +<html dir="ltr"><head></head><body contenteditable="true"><p>al<span style="background-color: rgb(255, 0, 0); color: rgb(0, 0, 255); font-family: "";">!</span></p><p><span style="color: rgb(0, 0, 255); font-family: ""; background-color: rgb(255, 0, 0);">aaaaaaa123123123123</span>haaaaaaaa!</p></body></html> \ No newline at end of file diff --git a/console/test/testver2.txt b/console/test/testver2.txt new file mode 100644 index 0000000000000000000000000000000000000000..2eae37aae9ba9a6e1fb06998d9ee6971bb4508f0 --- /dev/null +++ b/console/test/testver2.txt @@ -0,0 +1 @@ +<html dir="ltr"><head></head><body contenteditable="true"><p><span style="font-family: "";">Hello <span style="color: rgb(51, 77, 179);">my</span> <span style="background-color: rgb(26, 0, 104);">friedasdasdasd</span></span></p></body></html> \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e750102e09269a4ac558e10a6612998e5ca4c0f2..e1bef7e873c1f79108a6676ad60e4566ca1d1950 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/list/build.gradle b/list/build.gradle deleted file mode 100644 index f739cf86f8b84486d0d228a2a337215b3bf16b02..0000000000000000000000000000000000000000 --- a/list/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - */ - -plugins { - id 'notes.multi.kotlin-library-conventions' -} diff --git a/list/src/main/kotlin/notes/multi/list/LinkedList.kt b/list/src/main/kotlin/notes/multi/list/LinkedList.kt deleted file mode 100644 index 3b55eb9bbdcf097ef280952f786f89c4471c8d2b..0000000000000000000000000000000000000000 --- a/list/src/main/kotlin/notes/multi/list/LinkedList.kt +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package notes.multi.list - -class LinkedList { - private var head: Node? = null - - fun add(element: String) { - val newNode = Node(element) - - val it = tail(head) - if (it == null) { - head = newNode - } else { - it.next = newNode - } - } - - private fun tail(head: Node?): Node? { - var it: Node? - - it = head - while (it?.next != null) { - it = it.next - } - - return it - } - - fun remove(element: String): Boolean { - var result = false - var previousIt: Node? = null - var it: Node? = head - while (!result && it != null) { - if (0 == element.compareTo(it.data)) { - result = true - unlink(previousIt, it) - break - } - previousIt = it - it = it.next - } - - return result - } - - private fun unlink(previousIt: Node?, currentIt: Node) { - if (currentIt == head) { - head = currentIt.next - } else { - previousIt?.next = currentIt.next - } - } - - fun size(): Int { - var size = 0 - - var it = head - while (it != null) { - ++size - it = it.next - } - - return size - } - - fun get(idx: Int): String { - var index = idx - var it = head - while (index > 0 && it != null) { - it = it.next - index-- - } - - if (it == null) { - throw IndexOutOfBoundsException("Index is out of range") - } - - return it.data - } - - private data class Node(val data: String) { - var next: Node? = null - } -} diff --git a/list/src/test/kotlin/notes/multi/list/LinkedListTest.kt b/list/src/test/kotlin/notes/multi/list/LinkedListTest.kt deleted file mode 100644 index d252d07f6c110067d1bd3036e9b07fc815dba0dd..0000000000000000000000000000000000000000 --- a/list/src/test/kotlin/notes/multi/list/LinkedListTest.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle "init" task. - */ -package notes.multi.list - -import org.junit.jupiter.api.Test - -import org.junit.jupiter.api.Assertions.* - -class LinkedListTest { - @Test fun testConstructor() { - val list = LinkedList() - assertEquals(0, list.size()) - } - - @Test fun testAdd() { - val list = LinkedList() - - list.add("one") - assertEquals(1, list.size()) - assertEquals("one", list.get(0)) - - list.add("two") - assertEquals(2, list.size()) - assertEquals("two", list.get(1)) - } - - @Test fun testRemove() { - val list = LinkedList() - - list.add("one") - list.add("two") - assertTrue(list.remove("one")) - - assertEquals(1, list.size()) - assertEquals("two", list.get(0)) - - assertTrue(list.remove("two")) - assertEquals(0, list.size()) - } - - @Test fun testRemoveMissing() { - val list = LinkedList() - - list.add("one") - list.add("two") - assertFalse(list.remove("three")) - assertEquals(2, list.size()) - } -} diff --git a/settings.gradle b/settings.gradle index ec950590465023d2c78787058be62d6460463f58..335b53caf933daba3d86412ad6c2938424944d70 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,4 +8,4 @@ */ rootProject.name = 'notes-multi' -include('app', 'list', 'utilities', 'console') +include('app', 'utilities', 'console') diff --git a/utilities/build.gradle b/utilities/build.gradle index 12591b8a4fbeb35c1914f5f7e403b312f225720c..2bf145ba1f3c18bf1e04a667ffd1ebba3cd7d91b 100644 --- a/utilities/build.gradle +++ b/utilities/build.gradle @@ -9,16 +9,35 @@ plugins { id 'org.openjfx.javafxplugin' version '0.0.13' } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + javafx { version = '18.0.2' - modules = ['javafx.controls', 'javafx.graphics'] + modules = ['javafx.controls', 'javafx.graphics', 'javafx.web'] +} + +repositories { + mavenCentral() } dependencies { - api project(':list') testImplementation 'org.jetbrains.kotlin:kotlin-test' + + implementation("org.jetbrains.exposed:exposed-core:0.40.1") + implementation("org.jetbrains.exposed:exposed-dao:0.40.1") + implementation("org.jetbrains.exposed:exposed-jdbc:0.40.1") } test { useJUnitPlatform() } + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} diff --git a/utilities/src/main/kotlin/notes/multi/utilities/DatabaseOperations.kt b/utilities/src/main/kotlin/notes/multi/utilities/DatabaseOperations.kt new file mode 100644 index 0000000000000000000000000000000000000000..0eb7b8c8131faac360896fffebf7381aa3f765fd --- /dev/null +++ b/utilities/src/main/kotlin/notes/multi/utilities/DatabaseOperations.kt @@ -0,0 +1,90 @@ +package notes.multi.utilities + +import notes.multi.utilities.Note + +import org.jetbrains.exposed.dao.id.IntIdTable +import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq +import org.jetbrains.exposed.sql.transactions.transaction + +import java.sql.Connection +import java.sql.DriverManager +import java.sql.SQLException +import java.time.LocalDate +import java.time.LocalDateTime +import kotlin.io.path.createTempDirectory + +class DatabaseOperations() { + object Notes : IntIdTable() { + val title: Column<String?> = varchar("title", 100).nullable() + val text = text("text", eagerLoading = true).nullable() + val dateCreated = varchar("dateCreated", 30) + val lastModified = varchar("lastModified", 30) + } + + companion object CRUD { + fun addNote(note: Note) { + val newNote = Notes.insert { + it[Notes.title] = note.title + it[Notes.text] = note.text.toString() + it[Notes.dateCreated] = note.dateCreated + it[Notes.lastModified] = note.lastModified + } get Notes.id + } + + fun getNote(id: Int): Note { + val tempNote = Note() + + Notes.select { Notes.id eq id }.forEach { + tempNote.title = it[Notes.title] + tempNote.text = StringBuffer(it[Notes.text]) + tempNote.dateCreated = it[Notes.dateCreated] + tempNote.lastModified = it[Notes.lastModified] + } + + return tempNote + } + + fun updateNote(id: Int, note: Note) { + Notes.update ({Notes.id eq id}) { + it[Notes.title] = note.title + it[Notes.text] = note.text.toString() + it[Notes.dateCreated] = note.dateCreated + it[Notes.lastModified] = note.lastModified + } + } + + fun deleteNote(id: Int) { + Notes.deleteWhere { Notes.id eq id } + updateNoteId() + } + + private fun updateNoteId() { + var id = 1 + Notes.slice(Notes.id).selectAll().forEach() { + Notes.update ({Notes.id eq it[Notes.id]}) { + it[Notes.id] = id + } + id += 1 + } + } + + fun getAllNotes(): MutableList<Note> { + var listOfNotes: MutableList<Note> = mutableListOf() + + Notes.selectAll().forEach { + var tempNote = Note(it[Notes.title], StringBuffer(it[Notes.text]), it[Notes.dateCreated], it[Notes.lastModified]) + listOfNotes.add(tempNote) + } + return listOfNotes + } + } + + +//object Folder : IntIdTable() { +// val folderName = varchar("folderName", 100).nullable() +// val notes = arrayOf(Notes.id) +// val dateCreated = varchar("dateCreated", 30) +// val lastUpdated = varchar("lastUpdated", 30) +//} +} \ No newline at end of file diff --git a/utilities/src/main/kotlin/notes/multi/utilities/JoinUtils.kt b/utilities/src/main/kotlin/notes/multi/utilities/JoinUtils.kt deleted file mode 100644 index 1aa4e0ca0a3d10f7743f88c371c96d7d8e3d0839..0000000000000000000000000000000000000000 --- a/utilities/src/main/kotlin/notes/multi/utilities/JoinUtils.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package notes.multi.utilities - -import notes.multi.list.LinkedList - -class JoinUtils { - companion object { - fun join(source: LinkedList): String { - val result = StringBuilder() - for (i in 0 until source.size()) { - if (result.isNotEmpty()) { - result.append(" ") - } - result.append(source.get(i)) - } - - return result.toString() - } - } -} diff --git a/utilities/src/main/kotlin/notes/multi/utilities/Note.kt b/utilities/src/main/kotlin/notes/multi/utilities/Note.kt index a523006d96ae025bf285b838fddd3bd1be9e6876..4719680b1a0d5a708c528bb7d2de8547c1aa8bd5 100644 --- a/utilities/src/main/kotlin/notes/multi/utilities/Note.kt +++ b/utilities/src/main/kotlin/notes/multi/utilities/Note.kt @@ -13,13 +13,10 @@ import java.time.LocalDateTime * @param lastModified Last modification date of the note * @param location Location of the note */ -class Note(var title: String = "Untitled", - var text: StringBuffer = StringBuffer(""), - val author: String = "?", // User class? - var extension: String= "?", // necessary? - val dateCreated: LocalDate? = LocalDate.now(), - var lastModified: LocalDateTime? = LocalDateTime.now(), - var location: String? = null) { // path to the created file? +class Note(var title: String? = "Untitled", + var text: StringBuffer? = StringBuffer(""), +// val author: String = "?", // User class? + var dateCreated: String = LocalDate.now().toString(), + var lastModified: String = LocalDateTime.now().toString()) { // update last modified date - // images? } \ No newline at end of file diff --git a/utilities/src/main/kotlin/notes/multi/utilities/NoteTextWindow.kt b/utilities/src/main/kotlin/notes/multi/utilities/NoteTextWindow.kt index 55c0fde27fc18cead71821ae3cc663498604e5fc..07f1c8a51eee0bf9099d0092fc38efa831593cff 100644 --- a/utilities/src/main/kotlin/notes/multi/utilities/NoteTextWindow.kt +++ b/utilities/src/main/kotlin/notes/multi/utilities/NoteTextWindow.kt @@ -8,10 +8,21 @@ import javafx.scene.control.TextArea import javafx.scene.layout.VBox import javafx.scene.layout.AnchorPane import javafx.application.Platform +import javafx.scene.Node import javafx.scene.control.Alert import javafx.scene.control.ButtonType import javafx.scene.input.KeyCode +import javafx.scene.input.MouseDragEvent +import javafx.scene.input.MouseEvent import javafx.scene.layout.Priority +import javafx.scene.web.HTMLEditor +import org.jetbrains.exposed.sql.Database +import org.jetbrains.exposed.sql.SchemaUtils +import org.jetbrains.exposed.sql.deleteWhere +import org.jetbrains.exposed.sql.transactions.transaction +import java.beans.EventHandler +import java.time.LocalDate +import java.time.LocalDateTime /** * - Displays a responsive `TextArea` in a window with the text of the file passed to the `Application.launch` function @@ -41,13 +52,14 @@ class TextWindow(): Application() { } override fun start(stage: Stage) { - val path = paramsMap["location"]!! - val fileController = FileManager(path, paramsMap["title"]!!) - stage.title = paramsMap["title"] - val textarea = TextArea() + stage.setTitle(paramsMap["title"]) + val textarea = HTMLEditor() + //textarea.setText(paramsMap["text"]) + textarea.htmlText = paramsMap["text"] + + //textarea.setWrapText(true) + - textarea.text = fileController.openFile() - textarea.isWrapText = true val scroll = ScrollPane() val anchor = AnchorPane(textarea) @@ -85,7 +97,33 @@ class TextWindow(): Application() { val result = warning.showAndWait() if (result.isPresent) { when (result.get()) { - ButtonType.OK -> fileController.writeFile(textarea.text) + ButtonType.OK -> { + // filecontroller.writeFile(textarea.htmlText) + + + Database.connect("jdbc:sqlite:test.db") + transaction { + SchemaUtils.create(DatabaseOperations.Notes) + var newNote = Note(paramsMap["title"], StringBuffer(textarea.htmlText), + LocalDate.now().toString(), LocalDateTime.now().toString()) + var updateId = paramsMap["id"]?.toInt() + if (updateId !== null && updateId != -1) { + DatabaseOperations.updateNote(updateId, newNote) + } else { + DatabaseOperations.addNote(newNote) + } + } + + // + // Database.connect("jdbc:sqlite:test.db") + // transaction { + // SchemaUtils.create(DatabaseOperations.Notes) + // var newNote = Note(paramsMap["title"], StringBuffer(textarea.htmlText), + // LocalDate.now().toString(), LocalDateTime.now().toString()) + // DatabaseOperations.addNote(newNote) + // } + + } } } } else if (event.code == KeyCode.D && controlPressed) { @@ -95,8 +133,20 @@ class TextWindow(): Application() { val result = warning.showAndWait() if (result.isPresent) { when (result.get()) { - ButtonType.OK -> {fileController.deleteFile() - Platform.exit()} + ButtonType.OK -> { + // filecontroller.deleteFile() + + Database.connect("jdbc:sqlite:test.db") + transaction { + SchemaUtils.create(DatabaseOperations.Notes) + var deleteId = paramsMap["id"]?.toInt() + if (deleteId !== null && deleteId != -1) { + DatabaseOperations.deleteNote(deleteId) + } + } + + Platform.exit() + } } } } else if (event.code == KeyCode.W && controlPressed) { @@ -121,6 +171,7 @@ class TextWindow(): Application() { if (controlPressed) {controlPressed = false} } + stage.show() } } \ No newline at end of file diff --git a/utilities/src/main/kotlin/notes/multi/utilities/SplitUtils.kt b/utilities/src/main/kotlin/notes/multi/utilities/SplitUtils.kt deleted file mode 100644 index 62c2af4e023ffa1612be6b6eb39964be49a1ce0e..0000000000000000000000000000000000000000 --- a/utilities/src/main/kotlin/notes/multi/utilities/SplitUtils.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package notes.multi.utilities - -import notes.multi.list.LinkedList - -class SplitUtils { - companion object { - fun split(source: String): LinkedList { - var lastFind = 0 - val result = LinkedList() - - var currentFind = source.indexOf(" ", lastFind) - while (currentFind != -1) { - var token = source.substring(lastFind) - if (currentFind != -1) { - token = token.substring(0, currentFind - lastFind) - } - - addIfValid(token, result) - lastFind = currentFind + 1 - currentFind = source.indexOf(" ", lastFind) - } - - val token = source.substring(lastFind) - addIfValid(token, result) - - return result - } - - private fun addIfValid(token: String, list: LinkedList) { - if (isTokenValid(token)) { - list.add(token) - } - } - - private fun isTokenValid(token: String): Boolean { - return token.isNotEmpty() - } - } -} diff --git a/utilities/src/main/kotlin/notes/multi/utilities/StringUtils.kt b/utilities/src/main/kotlin/notes/multi/utilities/StringUtils.kt deleted file mode 100644 index b0906b8b2eced0446b88c24a2f55b7266d3c4a29..0000000000000000000000000000000000000000 --- a/utilities/src/main/kotlin/notes/multi/utilities/StringUtils.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * This Kotlin source file was generated by the Gradle 'init' task. - */ -package notes.multi.utilities - -import notes.multi.list.LinkedList - -class StringUtils { - companion object { - fun join(source: LinkedList): String { - return JoinUtils.join(source) - } - - fun split(source: String): LinkedList { - return SplitUtils.split(source) - } - } -}