your messages table with update, delete buttons

This commit is contained in:
Szakalakamaka
2020-09-11 10:01:30 +02:00
parent 13dd0642ab
commit 790f34a5e1
38 changed files with 310 additions and 224 deletions

View File

@@ -2,7 +2,6 @@
<dictionary name="lomba"> <dictionary name="lomba">
<words> <words>
<w>logstashes</w> <w>logstashes</w>
<w>paggination</w>
<w>workdir</w> <w>workdir</w>
</words> </words>
</dictionary> </dictionary>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: io.projectreactor:reactor-test:3.3.6.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/projectreactor/reactor-test/3.3.6.RELEASE/reactor-test-3.3.6.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/projectreactor/reactor-test/3.3.6.RELEASE/reactor-test-3.3.6.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/projectreactor/reactor-test/3.3.6.RELEASE/reactor-test-3.3.6.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: jakarta.persistence:jakarta.persistence-api:2.2.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/jakarta/persistence/jakarta.persistence-api/2.2.3/jakarta.persistence-api-2.2.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/jakarta/persistence/jakarta.persistence-api/2.2.3/jakarta.persistence-api-2.2.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/jakarta/persistence/jakarta.persistence-api/2.2.3/jakarta.persistence-api-2.2.3-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: net.logstash.logback:logstash-logback-encoder:6.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/logstash/logback/logstash-logback-encoder/6.4/logstash-logback-encoder-6.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/logstash/logback/logstash-logback-encoder/6.4/logstash-logback-encoder-6.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/logstash/logback/logstash-logback-encoder/6.4/logstash-logback-encoder-6.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-data-redis-reactive:2.3.1.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-redis-reactive/2.3.1.RELEASE/spring-boot-starter-data-redis-reactive-2.3.1.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-redis-reactive/2.3.1.RELEASE/spring-boot-starter-data-redis-reactive-2.3.1.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-redis-reactive/2.3.1.RELEASE/spring-boot-starter-data-redis-reactive-2.3.1.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: org.springframework.data:spring-data-redis:2.2.6.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-redis/2.2.6.RELEASE/spring-data-redis-2.2.6.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-redis/2.2.6.RELEASE/spring-data-redis-2.2.6.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-redis/2.2.6.RELEASE/spring-data-redis-2.2.6.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>

185
.idea/workspace.xml generated
View File

@@ -20,30 +20,14 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="458cde88-df3d-44bc-9d57-a33823e2f1a6" name="Default Changelist" comment=""> <list default="true" id="458cde88-df3d-44bc-9d57-a33823e2f1a6" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_5.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_3_1_RELEASE.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/js/paggination.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Klaus.iml" beforeDir="false" afterPath="$PROJECT_DIR$/Klaus.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/KlausMvcController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/KlausMvcController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/img/avataaars.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/img/favicon.ico" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/img/portfolio/cabin.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/img/portfolio/cake.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/img/portfolio/circus.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/img/portfolio/game.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/img/portfolio/safe.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/img/portfolio/submarine.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/mail/contact_me.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/mail/contact_me.php" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/assets/mail/jqBootstrapValidation.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/css/styles.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/index.html" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/startbootstrap-freelancer-gh-pages/js/scripts.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/META-INF/Klaus.kotlin_module" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/release11/klaus/controller/KlausMvcController.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/release11/klaus/controller/KlausMvcController.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/target/classes/com/release11/klaus/controller/KlausMvcController.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/release11/klaus/controller/KlausMvcController.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/generated-sources/annotations/com/release11/klaus/mappers/MockedMessageMapperImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/target/generated-sources/annotations/com/release11/klaus/mappers/MockedMessageMapperImpl.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/target/classes/com/release11/klaus/model/EventRequestDto$EventRequestDtoBuilder.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/release11/klaus/model/EventRequestDto$EventRequestDtoBuilder.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/release11/klaus/model/EventRequestDto.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/release11/klaus/model/EventRequestDto.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/release11/klaus/repository/EventRepositoryImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/release11/klaus/repository/EventRepositoryImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/release11/klaus/service/EtrackServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/release11/klaus/service/EtrackServiceImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/static/js/paggination.js" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/static/js/paggination.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/templates/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/templates/index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/test-classes/com/release11/klaus/KlausApplicationTests.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/test-classes/com/release11/klaus/KlausApplicationTests.class" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -82,7 +66,8 @@
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" /> <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" /> <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/src/main/resources/static/img" /> <property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="restartRequiresConfirmation" value="false" />
</component> </component>
<component name="RecentsManager"> <component name="RecentsManager">
<key name="CreateClassDialog.RecentsKey"> <key name="CreateClassDialog.RecentsKey">
@@ -194,9 +179,9 @@
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="Application.KlausApplication" /> <item itemvalue="Application.KlausApplication" />
<item itemvalue="JUnit.KlausApplicationTests.contextLoads" />
<item itemvalue="JUnit.MockedResponseRedisRepositoryTest.setMockedResponse" /> <item itemvalue="JUnit.MockedResponseRedisRepositoryTest.setMockedResponse" />
<item itemvalue="JUnit.RedisConfigTest.jedisPool" /> <item itemvalue="JUnit.RedisConfigTest.jedisPool" />
<item itemvalue="JUnit.KlausApplicationTests.contextLoads" />
<item itemvalue="JUnit.MockedResponseRedisRepositoryTest.getMockedResponse" /> <item itemvalue="JUnit.MockedResponseRedisRepositoryTest.getMockedResponse" />
</list> </list>
</recent_temporary> </recent_temporary>
@@ -401,7 +386,35 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1599641271632</updated> <updated>1599641271632</updated>
</task> </task>
<option name="localTasksCounter" value="28" /> <task id="LOCAL-00028" summary="allmessages visible after addheader, removeheader operations">
<created>1599650846480</created>
<option name="number" value="00028" />
<option name="presentableId" value="LOCAL-00028" />
<option name="project" value="LOCAL" />
<updated>1599650846480</updated>
</task>
<task id="LOCAL-00029" summary="new operation delete message">
<created>1599658106007</created>
<option name="number" value="00029" />
<option name="presentableId" value="LOCAL-00029" />
<option name="project" value="LOCAL" />
<updated>1599658106007</updated>
</task>
<task id="LOCAL-00030" summary="delete and update buttons for all messages table">
<created>1599668629804</created>
<option name="number" value="00030" />
<option name="presentableId" value="LOCAL-00030" />
<option name="project" value="LOCAL" />
<updated>1599668629804</updated>
</task>
<task id="LOCAL-00031" summary="solved problem with binding lists between thymeleaf and controller&#10;added id filter for event searcher">
<created>1599739605273</created>
<option name="number" value="00031" />
<option name="presentableId" value="LOCAL-00031" />
<option name="project" value="LOCAL" />
<updated>1599739605273</updated>
</task>
<option name="localTasksCounter" value="32" />
<servers /> <servers />
</component> </component>
<component name="Vcs.Log.Tabs.Properties"> <component name="Vcs.Log.Tabs.Properties">
@@ -418,9 +431,6 @@
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" /> <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
<MESSAGE value="renaming package name" />
<MESSAGE value="redis spring repo&#10;data indexes for redis repo" />
<MESSAGE value="adding processes for history search&#10;adding custom redis appender" />
<MESSAGE value="Adding logic for events" /> <MESSAGE value="Adding logic for events" />
<MESSAGE value="html form for events" /> <MESSAGE value="html form for events" />
<MESSAGE value="get events by days" /> <MESSAGE value="get events by days" />
@@ -442,13 +452,17 @@
<MESSAGE value="pageable list for all messages" /> <MESSAGE value="pageable list for all messages" />
<MESSAGE value="implementing buttons for all messages table" /> <MESSAGE value="implementing buttons for all messages table" />
<MESSAGE value="all messages table visible for all controllers" /> <MESSAGE value="all messages table visible for all controllers" />
<option name="LAST_COMMIT_MESSAGE" value="all messages table visible for all controllers" /> <MESSAGE value="allmessages visible after addheader, removeheader operations" />
<MESSAGE value="new operation delete message" />
<MESSAGE value="delete and update buttons for all messages table" />
<MESSAGE value="solved problem with binding lists between thymeleaf and controller&#10;added id filter for event searcher" />
<option name="LAST_COMMIT_MESSAGE" value="solved problem with binding lists between thymeleaf and controller&#10;added id filter for event searcher" />
</component> </component>
<component name="WindowStateProjectService"> <component name="WindowStateProjectService">
<state x="574" y="128" key="#com.intellij.ide.util.MemberChooser" timestamp="1599550232513"> <state x="574" y="128" key="#com.intellij.ide.util.MemberChooser" timestamp="1599641773245">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="574" y="128" key="#com.intellij.ide.util.MemberChooser/0.0.1536.824@0.0.1536.824" timestamp="1599550232513" /> <state x="574" y="128" key="#com.intellij.ide.util.MemberChooser/0.0.1536.824@0.0.1536.824" timestamp="1599641773245" />
<state x="432" y="337" key="#com.intellij.refactoring.move.MoveHandler.SelectRefactoringDialog" timestamp="1599492129736"> <state x="432" y="337" key="#com.intellij.refactoring.move.MoveHandler.SelectRefactoringDialog" timestamp="1599492129736">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
@@ -461,79 +475,120 @@
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="178" y="0" key="#com.intellij.refactoring.rename.AutomaticRenamingDialog/0.0.1536.824@0.0.1536.824" timestamp="1599551270234" /> <state x="178" y="0" key="#com.intellij.refactoring.rename.AutomaticRenamingDialog/0.0.1536.824@0.0.1536.824" timestamp="1599551270234" />
<state x="499" y="159" key="#com.intellij.refactoring.typeMigration.ui.FailedConversionsDialog" timestamp="1598966629552"> <state x="499" y="159" key="#com.intellij.refactoring.typeMigration.ui.FailedConversionsDialog" timestamp="1599721825830">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="499" y="159" key="#com.intellij.refactoring.typeMigration.ui.FailedConversionsDialog/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599721825830" />
<state x="499" y="159" key="#com.intellij.refactoring.typeMigration.ui.FailedConversionsDialog/0.0.1536.824@0.0.1536.824" timestamp="1598966629552" /> <state x="499" y="159" key="#com.intellij.refactoring.typeMigration.ui.FailedConversionsDialog/0.0.1536.824@0.0.1536.824" timestamp="1598966629552" />
<state x="549" y="167" key="FileChooserDialogImpl" timestamp="1599229212212"> <state x="549" y="167" key="FileChooserDialogImpl" timestamp="1599642328449">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="549" y="167" key="FileChooserDialogImpl/0.0.1536.824@0.0.1536.824" timestamp="1599229212212" /> <state x="549" y="167" key="FileChooserDialogImpl/0.0.1536.824@0.0.1536.824" timestamp="1599642328449" />
<state width="1493" height="137" key="GridCell.Tab.0.bottom" timestamp="1599641190011"> <state width="1877" height="339" key="GridCell.Tab.0.bottom" timestamp="1599740809314">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state width="1493" height="124" key="GridCell.Tab.0.bottom/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599598129320" /> <state width="1493" height="277" key="GridCell.Tab.0.bottom/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599731379317" />
<state width="1877" height="221" key="GridCell.Tab.0.bottom/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599577341126" /> <state width="1877" height="339" key="GridCell.Tab.0.bottom/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599740809314" />
<state width="1493" height="137" key="GridCell.Tab.0.bottom/0.0.1536.824@0.0.1536.824" timestamp="1599641190011" /> <state width="1493" height="137" key="GridCell.Tab.0.bottom/0.0.1536.824@0.0.1536.824" timestamp="1599641190011" />
<state width="1493" height="137" key="GridCell.Tab.0.center" timestamp="1599641190010"> <state width="1877" height="339" key="GridCell.Tab.0.center" timestamp="1599740809314">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state width="1493" height="124" key="GridCell.Tab.0.center/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599598129320" /> <state width="1493" height="277" key="GridCell.Tab.0.center/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599731379317" />
<state width="1877" height="221" key="GridCell.Tab.0.center/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599577341126" /> <state width="1877" height="339" key="GridCell.Tab.0.center/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599740809314" />
<state width="1493" height="137" key="GridCell.Tab.0.center/0.0.1536.824@0.0.1536.824" timestamp="1599641190010" /> <state width="1493" height="137" key="GridCell.Tab.0.center/0.0.1536.824@0.0.1536.824" timestamp="1599641190010" />
<state width="1493" height="137" key="GridCell.Tab.0.left" timestamp="1599641190010"> <state width="1877" height="339" key="GridCell.Tab.0.left" timestamp="1599740809314">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state width="1493" height="124" key="GridCell.Tab.0.left/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599598129320" /> <state width="1493" height="277" key="GridCell.Tab.0.left/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599731379317" />
<state width="1877" height="221" key="GridCell.Tab.0.left/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599577341125" /> <state width="1877" height="339" key="GridCell.Tab.0.left/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599740809314" />
<state width="1493" height="137" key="GridCell.Tab.0.left/0.0.1536.824@0.0.1536.824" timestamp="1599641190010" /> <state width="1493" height="137" key="GridCell.Tab.0.left/0.0.1536.824@0.0.1536.824" timestamp="1599641190010" />
<state width="1493" height="137" key="GridCell.Tab.0.right" timestamp="1599641190010"> <state width="1877" height="339" key="GridCell.Tab.0.right" timestamp="1599740809314">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state width="1493" height="124" key="GridCell.Tab.0.right/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599598129320" /> <state width="1493" height="277" key="GridCell.Tab.0.right/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599731379317" />
<state width="1877" height="221" key="GridCell.Tab.0.right/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599577341126" /> <state width="1877" height="339" key="GridCell.Tab.0.right/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599740809314" />
<state width="1493" height="137" key="GridCell.Tab.0.right/0.0.1536.824@0.0.1536.824" timestamp="1599641190010" /> <state width="1493" height="137" key="GridCell.Tab.0.right/0.0.1536.824@0.0.1536.824" timestamp="1599641190010" />
<state width="1493" height="180" key="GridCell.Tab.1.bottom" timestamp="1599480862727"> <state width="1877" height="339" key="GridCell.Tab.1.bottom" timestamp="1599740809315">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state width="1493" height="123" key="GridCell.Tab.1.bottom/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599727916741" />
<state width="1877" height="339" key="GridCell.Tab.1.bottom/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599740809315" />
<state width="1493" height="180" key="GridCell.Tab.1.bottom/0.0.1536.824@0.0.1536.824" timestamp="1599480862727" /> <state width="1493" height="180" key="GridCell.Tab.1.bottom/0.0.1536.824@0.0.1536.824" timestamp="1599480862727" />
<state width="1493" height="180" key="GridCell.Tab.1.center" timestamp="1599480862727"> <state width="1877" height="339" key="GridCell.Tab.1.center" timestamp="1599740809315">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state width="1493" height="123" key="GridCell.Tab.1.center/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599727916741" />
<state width="1877" height="339" key="GridCell.Tab.1.center/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599740809315" />
<state width="1493" height="180" key="GridCell.Tab.1.center/0.0.1536.824@0.0.1536.824" timestamp="1599480862727" /> <state width="1493" height="180" key="GridCell.Tab.1.center/0.0.1536.824@0.0.1536.824" timestamp="1599480862727" />
<state width="1493" height="180" key="GridCell.Tab.1.left" timestamp="1599480862727"> <state width="1877" height="339" key="GridCell.Tab.1.left" timestamp="1599740809315">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state width="1493" height="123" key="GridCell.Tab.1.left/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599727916741" />
<state width="1877" height="339" key="GridCell.Tab.1.left/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599740809315" />
<state width="1493" height="180" key="GridCell.Tab.1.left/0.0.1536.824@0.0.1536.824" timestamp="1599480862727" /> <state width="1493" height="180" key="GridCell.Tab.1.left/0.0.1536.824@0.0.1536.824" timestamp="1599480862727" />
<state width="1493" height="180" key="GridCell.Tab.1.right" timestamp="1599480862727"> <state width="1877" height="339" key="GridCell.Tab.1.right" timestamp="1599740809315">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state width="1493" height="123" key="GridCell.Tab.1.right/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599727916741" />
<state width="1877" height="339" key="GridCell.Tab.1.right/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599740809315" />
<state width="1493" height="180" key="GridCell.Tab.1.right/0.0.1536.824@0.0.1536.824" timestamp="1599480862727" /> <state width="1493" height="180" key="GridCell.Tab.1.right/0.0.1536.824@0.0.1536.824" timestamp="1599480862727" />
<state x="299" y="67" key="Maven.ArtifactSearchDialog" timestamp="1598862685882"> <state x="299" y="67" key="Maven.ArtifactSearchDialog" timestamp="1598862685882">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="299" y="67" key="Maven.ArtifactSearchDialog/0.0.1536.824@0.0.1536.824" timestamp="1598862685882" /> <state x="299" y="67" key="Maven.ArtifactSearchDialog/0.0.1536.824@0.0.1536.824" timestamp="1598862685882" />
<state x="361" y="145" key="Vcs.Push.Dialog.v2" timestamp="1599641605158"> <state x="2371" y="183" key="Vcs.Push.Dialog.v2" timestamp="1599739608235">
<screen x="0" y="0" width="1536" height="824" /> <screen x="1920" y="0" width="1920" height="1040" />
</state> </state>
<state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599579111943" /> <state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599668638300" />
<state x="2371" y="183" key="Vcs.Push.Dialog.v2/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599739608235" />
<state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824@0.0.1536.824" timestamp="1599641605158" /> <state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824@0.0.1536.824" timestamp="1599641605158" />
<state x="478" y="145" width="579" height="592" key="find.popup" timestamp="1599562452922"> <state x="478" y="145" width="579" height="592" key="find.popup" timestamp="1599656923861">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="478" y="145" width="579" height="592" key="find.popup/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599656923861" />
<state x="478" y="145" width="579" height="592" key="find.popup/0.0.1536.824@0.0.1536.824" timestamp="1599562452922" /> <state x="478" y="145" width="579" height="592" key="find.popup/0.0.1536.824@0.0.1536.824" timestamp="1599562452922" />
<state x="209" y="33" key="new project wizard" timestamp="1598955672188"> <state x="209" y="33" key="new project wizard" timestamp="1598955672188">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="209" y="33" key="new project wizard/0.0.1536.824@0.0.1536.824" timestamp="1598955672188" /> <state x="209" y="33" key="new project wizard/0.0.1536.824@0.0.1536.824" timestamp="1598955672188" />
<state x="425" y="187" key="run.anything.popup" timestamp="1599590801755"> <state x="499" y="170" key="refactoring.ChangeSignatureDialog" timestamp="1599668344218">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="425" y="187" key="run.anything.popup/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599590801755" /> <state x="499" y="170" key="refactoring.ChangeSignatureDialog/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599668344218" />
<state x="425" y="187" key="run.anything.popup" timestamp="1599665080197">
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="425" y="187" key="run.anything.popup/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599665080197" />
<state x="425" y="187" key="run.anything.popup/0.0.1536.824@0.0.1536.824" timestamp="1599552366851" /> <state x="425" y="187" key="run.anything.popup/0.0.1536.824@0.0.1536.824" timestamp="1599552366851" />
<state x="431" y="145" width="672" height="678" key="search.everywhere.popup" timestamp="1599210139274"> <state x="431" y="145" width="672" height="678" key="search.everywhere.popup" timestamp="1599210139274">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="431" y="145" width="672" height="678" key="search.everywhere.popup/0.0.1536.824@0.0.1536.824" timestamp="1599210139274" /> <state x="431" y="145" width="672" height="678" key="search.everywhere.popup/0.0.1536.824@0.0.1536.824" timestamp="1599210139274" />
</component> </component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/release11/klaus/repository/EventRepositoryImpl.java</url>
<line>56</line>
<option name="timeStamp" value="4" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/release11/klaus/repository/EventRepositoryImpl.java</url>
<line>55</line>
<option name="timeStamp" value="5" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/release11/klaus/repository/EventRepositoryImpl.java</url>
<line>52</line>
<option name="timeStamp" value="6" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/release11/klaus/repository/EventRepositoryImpl.java</url>
<line>64</line>
<option name="timeStamp" value="10" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
</project> </project>

View File

@@ -13,10 +13,9 @@ public class KlausApplication {
} }
//TODO //TODO
//TODO history logs; for log indexing - create custom log appender for Redis - in case etrack would be too slow
//TODO JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisHost, redisPort, timeout, redisPassword) //TODO JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisHost, redisPort, timeout, redisPassword)
//TODO JedisPool optimalization https://partners-intl.aliyun.com/help/doc-detail/98726.htm //TODO JedisPool optimalization https://partners-intl.aliyun.com/help/doc-detail/98726.htm
// logging, security, account creation // logging, security, account creation
// tracking clients activity, admin panel // tracking clients activity, admin panel
// use a centralized logging collection tool like logstash for admin panel // use a centralized logging collection tool like logstash for admin panel
//TODO split into separate microservices //TODO swagger

View File

@@ -2,12 +2,12 @@ package com.release11.klaus.controller;
import com.release11.klaus.model.MockedMessageDto; import com.release11.klaus.model.MockedMessageDto;
import com.release11.klaus.service.KlausService;
import com.release11.klaus.utilis.BusinessKey; import com.release11.klaus.utilis.BusinessKey;
import com.release11.klaus.utilis.TrackingClient; import com.release11.klaus.utilis.TrackingClient;
import com.release11.klaus.model.MockedMessage;
import com.release11.klaus.service.KlausService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.RequestEntity; import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.UUID; import java.util.UUID;
@Controller("/") @Controller("/")
@@ -28,6 +29,15 @@ public class KlausController {
private final KlausService klausService; private final KlausService klausService;
@RequestMapping(value = "klaus/v1/delete/{clientUUID}/{mockedResponseId}")
public ResponseEntity<String> deleteMockedResponse(@PathVariable UUID clientUUID,
@PathVariable int mockedResponseId){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "deleteMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId)));
klausService.deleteMockedResponse(clientUUID, mockedResponseId);
return new ResponseEntity<>("message has been deleted", HttpStatus.OK);
}
@RequestMapping(value = "klaus/v1/getAll/{clientUUID}") @RequestMapping(value = "klaus/v1/getAll/{clientUUID}")
public ResponseEntity<String> getAllMockedResponses(@PathVariable UUID clientUUID){ public ResponseEntity<String> getAllMockedResponses(@PathVariable UUID clientUUID){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse", TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse",
@@ -43,18 +53,22 @@ public class KlausController {
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse", TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID), BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId))); BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId)));
MockedMessageDto mockedMessageDto = klausService.getMockedResponse(clientUUID, mockedResponseId);
return klausService.getMockedResponse(clientUUID, mockedResponseId); HttpHeaders httpHeaders = new HttpHeaders();
if (mockedMessageDto.getHttpHeaders() != null) mockedMessageDto.getHttpHeaders().forEach(httpHeaders::set);
return new ResponseEntity<>(mockedMessageDto.getMessageBody(), httpHeaders,
Objects.requireNonNull(HttpStatus.valueOf(mockedMessageDto.getHttpStatus())));
} }
@PostMapping(value = "klaus/v1/set/{clientUUID}/{mockedResponseId}") @PostMapping(value = "klaus/v1/set/{clientUUID}/{mockedResponseId}")
public ResponseEntity<String> setMockedResponse(@PathVariable UUID clientUUID, public ResponseEntity<String> setMockedResponse(@PathVariable UUID clientUUID,
@PathVariable int mockedResponseId, @PathVariable int mockedResponseId,
@RequestParam(required = false) int httpStatus, @RequestParam(required = false) Integer httpStatus,
RequestEntity<String> requestEntity){ RequestEntity<String> requestEntity){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "setMockedResponse", TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "setMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID), BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId))); BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId)));
if (httpStatus == null) httpStatus = 200;
MockedMessageDto mockedMessageDto = new MockedMessageDto(clientUUID, mockedResponseId, MockedMessageDto mockedMessageDto = new MockedMessageDto(clientUUID, mockedResponseId,
requestEntity.getHeaders().getContentType().toString(), requestEntity.getBody(), requestEntity.getHeaders().getContentType().toString(), requestEntity.getBody(),

View File

@@ -27,20 +27,21 @@ import java.util.*;
@AllArgsConstructor @AllArgsConstructor
public class KlausMvcController { public class KlausMvcController {
private final KlausService klausService; private final KlausService klausService;
private final Set<MockedMessageDto> globalMockedMessageDtoList = new HashSet<>();
@GetMapping("/login") @GetMapping("/login")
public String login() { public String login() {
return "login"; return "login";
} }
@SneakyThrows
@GetMapping({"/home", "/home/{uuid}"}) @GetMapping({"/home", "/home/{uuid}"})
public String showHome(final MockedMessageDto mockedMessageDto, Model model, public String showHome(final MockedMessageDto mockedMessageDto, final Model model,
@RequestParam(required = false) UUID clientUUID, @RequestParam(required = false) UUID clientUUID,
@PathVariable(required = false) UUID uuid) { @PathVariable(required = false) UUID uuid) {
if (uuid != null) clientUUID = uuid; if (uuid != null) clientUUID = uuid;
if (clientUUID != null) mockedMessageDto.setClientUUID(clientUUID); if (clientUUID != null) mockedMessageDto.setClientUUID(clientUUID);
model.addAttribute("mockedMessageDtoList", klausService.getAllMockedResponses(clientUUID)); populateModelWithLists(model, mockedMessageDto,true);
return "index"; return "index";
} }
@@ -51,7 +52,7 @@ public class KlausMvcController {
BusinessKey.CLIENT_UUID, String.valueOf(mockedMessageDto.getClientUUID()), BusinessKey.CLIENT_UUID, String.valueOf(mockedMessageDto.getClientUUID()),
BusinessKey.MESSAGE_ID, String.valueOf(mockedMessageDto.getMockedResponseId()))); BusinessKey.MESSAGE_ID, String.valueOf(mockedMessageDto.getMockedResponseId())));
klausService.setMockedResponse(mockedMessageDto); klausService.setMockedResponse(mockedMessageDto);
model.addAttribute("mockedMessageDtoList", klausService.getAllMockedResponses(mockedMessageDto.getClientUUID())); populateModelWithLists(model, mockedMessageDto,true);
model.addAttribute("mockSaved", "true"); model.addAttribute("mockSaved", "true");
return "index"; return "index";
} }
@@ -66,20 +67,36 @@ public class KlausMvcController {
mockedMessageDto.getMockedResponseId()).toString(); mockedMessageDto.getMockedResponseId()).toString();
} }
@RequestMapping(value = "/home/{clientUUID}", params = {"addHeader"}) @RequestMapping(value = "/home/{clientUUID}", params = {"addHeader"} )
public String addRow(final MockedMessageDto mockedMessageDto, @RequestParam String headerKey, public String addHeader(final MockedMessageDto mockedMessageDto, @RequestParam String headerKey,
@RequestParam String headerValue) { @RequestParam String headerValue, final Model model) {
populateModelWithLists(model, mockedMessageDto,false);
mockedMessageDto.getHttpHeaders().put(headerKey, headerValue); mockedMessageDto.getHttpHeaders().put(headerKey, headerValue);
return "index"; return "index";
} }
@RequestMapping(value="/home/{clientUUID}", params={"removeHeader"}) @RequestMapping(value="/home/{clientUUID}", params={"removeHeader"})
public String removeHeader(final MockedMessageDto mockedMessageDto, final HttpServletRequest req) { public String removeHeader(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) {
populateModelWithLists(model, mockedMessageDto,false);
mockedMessageDto.getHttpHeaders().remove(req.getParameter("removeHeader")); mockedMessageDto.getHttpHeaders().remove(req.getParameter("removeHeader"));
System.out.println(mockedMessageDto);
return "index"; return "index";
} }
@RequestMapping(value="/home/{clientUUID}", params={"updateMessage"})
public String updateMessage(final HttpServletRequest req, final MockedMessageDto mockedMessageDto, final Model model) {
model.addAttribute("mockedMessageDto", klausService.getMockedResponse(mockedMessageDto.getClientUUID(),
Integer.parseInt(req.getParameter("updateMessage"))));
populateModelWithLists(model, mockedMessageDto, false);
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"removeMessage"})
public String removeMessage(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) {
klausService.deleteMockedResponse(mockedMessageDto.getClientUUID(),
Integer.parseInt(req.getParameter("removeMessage")));
populateModelWithLists(model, mockedMessageDto, true);
return "index";
}
@SneakyThrows @SneakyThrows
@ModelAttribute("localhost") @ModelAttribute("localhost")
@@ -98,12 +115,21 @@ public class KlausMvcController {
"application/xml", "body", new LinkedHashMap<>(), 200); "application/xml", "body", new LinkedHashMap<>(), 200);
} }
@ModelAttribute("eventsDto") @ModelAttribute("eventRequestDto")
public EventRequestDto eventsDto() { public EventRequestDto eventRequestDto() {
return EventRequestDto.builder() return EventRequestDto.builder()
.mockedResponseId(1)
.localDateTimeFrom(LocalDateTime.of(LocalDate.now(), LocalTime.MIN)) .localDateTimeFrom(LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
.localDateTimeTo(LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIDNIGHT)) .localDateTimeTo(LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIDNIGHT))
.build(); .build();
} }
private void populateModelWithLists(Model model, MockedMessageDto mockedMessageDto, boolean updateList){
if (updateList){
globalMockedMessageDtoList.clear();
globalMockedMessageDtoList.addAll(klausService.getAllMockedResponses(mockedMessageDto.getClientUUID()));
}
model.addAttribute("mockedMessageDtoList", globalMockedMessageDtoList);
}
} }

View File

@@ -20,6 +20,6 @@ public class EventRequestDto {
private LocalDateTime localDateTimeFrom; private LocalDateTime localDateTimeFrom;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime localDateTimeTo; private LocalDateTime localDateTimeTo;
private int mockedResponseId; private Integer mockedResponseId;
} }

View File

@@ -29,25 +29,6 @@ public class MockedMessage implements Serializable {
@HttpCode @HttpCode
private Integer httpStatus; private Integer httpStatus;
public MockedMessage(MockedMessage mockedMessage) {
this.compositePrimaryKey = mockedMessage.getClientUUID().toString() + "_" + mockedMessage.getMockedResponseId();
this.clientUUID = mockedMessage.getClientUUID();
this.mockedResponseId = mockedMessage.getMockedResponseId();
this.mediaType = mockedMessage.getMediaType();
this.messageBody = mockedMessage.getMessageBody();
this.httpHeaders = mockedMessage.getHttpHeaders();
this.httpStatus = mockedMessage.getHttpStatus();
}
public MockedMessage(UUID clientUUID, int mockedResponseId, String mediaType,
String messageBody, Map<String, String> httpHeaders, Integer httpStatus) {
this.compositePrimaryKey = clientUUID.toString() + "_" + mockedResponseId;
this.clientUUID = clientUUID;
this.mockedResponseId = mockedResponseId;
this.mediaType = mediaType;
this.messageBody = messageBody;
this.httpHeaders = httpHeaders;
this.httpStatus = httpStatus;
}
} }

View File

@@ -5,8 +5,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.release11.klaus.model.Event; import com.release11.klaus.model.Event;
import com.release11.klaus.utilis.BusinessKey; import com.release11.klaus.utilis.BusinessKey;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import redis.clients.jedis.Jedis; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPool;
@@ -14,7 +12,10 @@ import redis.clients.jedis.JedisPool;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.*; import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Repository @Repository
@@ -52,6 +53,8 @@ public class EventRepositoryImpl implements EventRepository {
List<String> resultList = new ArrayList<>(); List<String> resultList = new ArrayList<>();
for (Map.Entry<BusinessKey, String> entry : businessKeys.entrySet()) { for (Map.Entry<BusinessKey, String> entry : businessKeys.entrySet()) {
String stringPattern = "\"" + entry.getKey() + ":" + entry.getValue() + "\""; String stringPattern = "\"" + entry.getKey() + ":" + entry.getValue() + "\"";
String u;
u = "das";
resultList = events.stream().filter(s -> s.contains(stringPattern)).collect(Collectors.toList()); resultList = events.stream().filter(s -> s.contains(stringPattern)).collect(Collectors.toList());
} }
return resultList; return resultList;

View File

@@ -12,4 +12,5 @@ import java.util.UUID;
@Transactional @Transactional
public interface MockedResponseRepository extends CrudRepository<MockedMessage, String> { public interface MockedResponseRepository extends CrudRepository<MockedMessage, String> {
List<MockedMessage> findAllByClientUUID(UUID clientUUID); List<MockedMessage> findAllByClientUUID(UUID clientUUID);
MockedMessage getByCompositePrimaryKey(String compositePrimaryKey);
} }

View File

@@ -23,6 +23,9 @@ public class EtrackServiceImpl implements EtrackService {
public List<Event> getEventsByDateTimeAndBusinessKeys(EventRequestDto eventsDto) { public List<Event> getEventsByDateTimeAndBusinessKeys(EventRequestDto eventsDto) {
Map<BusinessKey, String> businessKeys = new HashMap<>(); Map<BusinessKey, String> businessKeys = new HashMap<>();
businessKeys.put(BusinessKey.CLIENT_UUID, eventsDto.getClientUUID().toString()); businessKeys.put(BusinessKey.CLIENT_UUID, eventsDto.getClientUUID().toString());
if (eventsDto.getMockedResponseId() != null){
businessKeys.put(BusinessKey.MESSAGE_ID, String.valueOf(eventsDto.getMockedResponseId()));
}
return eventRepository.findEvents(eventsDto.getLocalDateTimeFrom(), eventsDto.getLocalDateTimeTo(), return eventRepository.findEvents(eventsDto.getLocalDateTimeFrom(), eventsDto.getLocalDateTimeTo(),
businessKeys); businessKeys);
} }

View File

@@ -11,6 +11,6 @@ import java.util.UUID;
public interface KlausService { public interface KlausService {
void deleteMockedResponse(UUID clientUUID, int mockedResponseId); void deleteMockedResponse(UUID clientUUID, int mockedResponseId);
List<MockedMessageDto> getAllMockedResponses(UUID clientUUID); List<MockedMessageDto> getAllMockedResponses(UUID clientUUID);
ResponseEntity<String> getMockedResponse(UUID clientUUID, int mockedResponseId); MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId);
ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto); ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto);
} }

View File

@@ -1,6 +1,5 @@
package com.release11.klaus.service; package com.release11.klaus.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.release11.klaus.mappers.MockedMessageMapper; import com.release11.klaus.mappers.MockedMessageMapper;
import com.release11.klaus.model.MockedMessage; import com.release11.klaus.model.MockedMessage;
import com.release11.klaus.model.MockedMessageDto; import com.release11.klaus.model.MockedMessageDto;
@@ -13,7 +12,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -22,13 +21,13 @@ import java.util.stream.Collectors;
@AllArgsConstructor @AllArgsConstructor
public class KlausServiceImpl implements KlausService { public class KlausServiceImpl implements KlausService {
private final ObjectMapper objectMapper;
private final MockedMessageMapper mockedMessageMapper; private final MockedMessageMapper mockedMessageMapper;
private final MockedResponseRepository mockedResponseRepository; private final MockedResponseRepository mockedResponseRepository;
@Override @Override
public void deleteMockedResponse(UUID clientUUID, int mockedResponseId) { public void deleteMockedResponse(UUID clientUUID, int mockedResponseId) {
String key = clientUUID.toString() + "_" + mockedResponseId;
mockedResponseRepository.deleteById(key);
} }
@Override @Override
@@ -39,15 +38,15 @@ public class KlausServiceImpl implements KlausService {
} }
@Override @Override
public ResponseEntity<String> getMockedResponse(UUID clientUUID, int mockedResponseId) { public MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId) {
log.info("KlausServiceImpl, operation getMockedResponse, clientId {}, mockedResponseId {} ", log.info("KlausServiceImpl, operation getMockedResponse, clientId {}, mockedResponseId {} ",
clientUUID, mockedResponseId); clientUUID, mockedResponseId);
String key = clientUUID.toString() + "_" + mockedResponseId; String key = clientUUID.toString() + "_" + mockedResponseId;
MockedMessage mockedMessage = mockedResponseRepository.findById(key).get(); Optional<MockedMessage> optionalMockedMessage = mockedResponseRepository.findById(key);
HttpHeaders httpHeaders = new HttpHeaders(); if (optionalMockedMessage.isPresent()) {
if(mockedMessage.getHttpHeaders() !=null)mockedMessage.getHttpHeaders().forEach(httpHeaders::set); return mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get());
return new ResponseEntity<>(mockedMessage.getMessageBody(), httpHeaders, }
Objects.requireNonNull(HttpStatus.valueOf(mockedMessage.getHttpStatus()))); return new MockedMessageDto();
} }
@Override @Override

View File

@@ -1,2 +1,2 @@
redis.host = redis-server redis.host = localhost
redis.port = 6379 redis.port = 6379

View File

@@ -3,7 +3,7 @@
<include resource="org/springframework/boot/logging/logback/base.xml"/> <include resource="org/springframework/boot/logging/logback/base.xml"/>
<!--https://github.com/kmtong/logback-redis-appender--> <!--https://github.com/kmtong/logback-redis-appender-->
<appender name="LOGSTASH" class="com.release11.klaus.utilis.RedisAppender"> <appender name="LOGSTASH" class="com.release11.klaus.utilis.RedisAppender">
<host>redis-image</host> <host>redis-server</host>
<port>6379</port> <port>6379</port>
<key>logstash</key> <key>logstash</key>
<layout class="ch.qos.logback.classic.PatternLayout"> <layout class="ch.qos.logback.classic.PatternLayout">

View File

@@ -45,9 +45,7 @@ button:focus {
margin: 1px; margin: 1px;
} }
button[name="allMessagesClicked"] {
color: #00b3b3;
}
#pagination-wrapper button { #pagination-wrapper button {
background: none; background: none;
@@ -56,6 +54,23 @@ button[name="allMessagesClicked"] {
transition: background-color 0.3s, color 0.3s; transition: background-color 0.3s, color 0.3s;
} }
button[name="removeMessage"]{
background: none;
border: none;
cursor: pointer;
transition: background-color 0.3s, color 0.3s;
}
button[name="updateMessage"]{
background: none;
border: none;
cursor: pointer;
transition: background-color 0.3s, color 0.3s;
}
button[name="allMessagesClicked"] {
color: #00b3b3;
}
button[name="removeHeader"] { button[name="removeHeader"] {
position: absolute; position: absolute;

View File

@@ -1,5 +1,5 @@
var state = { var state = {
'querySet': ["dupa1", "sra", "na", "leb"], 'querySet': [{"clientUUID":"436c4774-038f-4540-9c18-2691ca9b53d4","mockedResponseId":1908998,"mediaType":"application/xml","messageBody":"body","httpHeaders":null,"httpStatus":200}],
'page': 1, 'page': 1,
'rows': 10, 'rows': 10,
@@ -10,6 +10,7 @@ state.querySet = mockedMessageDtoList;
buildTable(); buildTable();
function pagination(querySet, page, rows) { function pagination(querySet, page, rows) {
var trimStart = (page - 1) * rows var trimStart = (page - 1) * rows
var trimEnd = trimStart + rows var trimEnd = trimStart + rows
var trimmedData = querySet.slice(trimStart, trimEnd) var trimmedData = querySet.slice(trimStart, trimEnd)
@@ -75,7 +76,6 @@ function buildTable() {
var data = pagination(state.querySet, state.page, state.rows) var data = pagination(state.querySet, state.page, state.rows)
var myList = data.querySet var myList = data.querySet
for(var i = 1; i<=myList.length; i++){ for(var i = 1; i<=myList.length; i++){
var j = i + (state.page-1) * 10; var j = i + (state.page-1) * 10;
if(i%2 === 0){ if(i%2 === 0){
@@ -84,6 +84,16 @@ function buildTable() {
<td>${myList[i-1].mockedResponseId}</td> <td>${myList[i-1].mockedResponseId}</td>
<td>${myList[i-1].mediaType}</td> <td>${myList[i-1].mediaType}</td>
<td>${myList[i-1].httpStatus}</td> <td>${myList[i-1].httpStatus}</td>
<td>
<button type="submit" name="updateMessage" value="${myList[i-1].mockedResponseId}">
<img src="/img/update-button.png" style="width: 20px;"/>
</button>
</td>
<td>
<button type="submit" name="removeMessage" value="${myList[i-1].mockedResponseId}">
<img src="/img/icons8-cancel-64.png" style="width: 20px;"/>
</button>
</td>
` `
}else{ }else{
var row = `<tr bgcolor="#e6ffff"> var row = `<tr bgcolor="#e6ffff">
@@ -91,6 +101,16 @@ function buildTable() {
<td>${myList[i-1].mockedResponseId}</td> <td>${myList[i-1].mockedResponseId}</td>
<td>${myList[i-1].mediaType}</td> <td>${myList[i-1].mediaType}</td>
<td>${myList[i-1].httpStatus}</td> <td>${myList[i-1].httpStatus}</td>
<td>
<button type="submit" name="updateMessage" value="${myList[i-1].mockedResponseId}">
<img src="/img/update-button.png" style="width: 20px;"/>
</button>
</td>
<td>
<button type="submit" name="removeMessage" value="${myList[i-1].mockedResponseId}">
<img src="/img/icons8-cancel-64.png" style="width: 20px;"/>
</button>
</td>
` `
} }

View File

@@ -10,14 +10,11 @@
</head> </head>
<body> <body>
<hr> <hr>
<div><br>In order to set mockup response please fill the form below:
</div>
<section class="page-section" id="main-section" > <section class="page-section" id="main-section" >
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="column" > <div class="column" >
<br>You can also simply fill and submit the below form: <br>In order to set mockup response please fill the form below:
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}" <form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post"> th:object="${mockedMessageDto}" method="post">
<table> <table>
@@ -93,6 +90,7 @@
</div> </div>
<div class="column"> <div class="column">
<br> <br>
<form th:action="@{/home/__${mockedMessageDto.clientUUID}__}" method="post" id="dupa" >
<table> <table>
<thead> <thead>
<tr> <tr>
@@ -102,15 +100,14 @@
<th class="tr-pageable">Http Status</th> <th class="tr-pageable">Http Status</th>
</tr> </tr>
</thead> </thead>
<tbody id="table-body"> <tbody id="table-body">
</tbody>
</tbody>
</table> </table>
</div> </form>
<div class="container "> <div class="container ">
<div id="pagination-wrapper"></div> <div id="pagination-wrapper"></div>
</div> </div>
</div>
</div> </div>
</div> </div>
@@ -124,6 +121,8 @@
<br>In order to set or get responses through curl or http tools you can use urls below. <br>In order to set or get responses through curl or http tools you can use urls below.
<br>When you set your response simply set headers and media type of your request that you expect to get in the <br>When you set your response simply set headers and media type of your request that you expect to get in the
response from the next step. response from the next step.
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/delete/<a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/set/ <a <br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/set/ <a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}?httpStatus={httpStatus} th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}?httpStatus={httpStatus}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/get/<a <br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/get/<a
@@ -135,12 +134,14 @@
<div> <div>
<br>To see your activity history use the form below <br>To see your activity history use the form below
<form action="#" th:action="@{/eventsForm}" th:object="${eventsDto}" method="post"> <form action="#" th:action="@{/eventsForm}" th:object="${eventRequestDto}" method="post">
<input type="text" th:name="clientUUID" th:value="${mockedMessageDto.clientUUID}" hidden/> <input type="text" th:name="clientUUID" th:value="${mockedMessageDto.clientUUID}" hidden/>
<br><label>Mocked response id:</label><br>
<input type="text" th:name="mockedResponseId" th:id="mockedResponseId" th:placeholder="all"/>
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">mockedResponseId error</td>
<br><label>Date from:</label><br> <br><label>Date from:</label><br>
<input type="datetime-local" th:field="*{localDateTimeFrom}"/> <input type="datetime-local" th:field="*{localDateTimeFrom}"/>
<td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom Error <td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom Error</td>
</td>
<br><label>Date to:</label><br> <br><label>Date to:</label><br>
<input type="datetime-local" th:field="*{localDateTimeTo}"/> <input type="datetime-local" th:field="*{localDateTimeTo}"/>
<td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo Error</td> <td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo Error</td>

View File

@@ -1,14 +1,13 @@
package com.release11.klaus; package com.release11.klaus;
import lombok.SneakyThrows;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest @SpringBootTest
class KlausApplicationTests { class KlausApplicationTests {
@SneakyThrows
@Test @Test
void contextLoads() { void contextLoads() {

View File

@@ -45,9 +45,7 @@ button:focus {
margin: 1px; margin: 1px;
} }
button[name="allMessagesClicked"] {
color: #00b3b3;
}
#pagination-wrapper button { #pagination-wrapper button {
background: none; background: none;
@@ -56,6 +54,23 @@ button[name="allMessagesClicked"] {
transition: background-color 0.3s, color 0.3s; transition: background-color 0.3s, color 0.3s;
} }
button[name="removeMessage"]{
background: none;
border: none;
cursor: pointer;
transition: background-color 0.3s, color 0.3s;
}
button[name="updateMessage"]{
background: none;
border: none;
cursor: pointer;
transition: background-color 0.3s, color 0.3s;
}
button[name="allMessagesClicked"] {
color: #00b3b3;
}
button[name="removeHeader"] { button[name="removeHeader"] {
position: absolute; position: absolute;

View File

@@ -1,5 +1,5 @@
var state = { var state = {
'querySet': ["dupa1", "sra", "na", "leb"], 'querySet': [{"clientUUID":"436c4774-038f-4540-9c18-2691ca9b53d4","mockedResponseId":1908998,"mediaType":"application/xml","messageBody":"body","httpHeaders":null,"httpStatus":200}],
'page': 1, 'page': 1,
'rows': 10, 'rows': 10,
@@ -10,6 +10,7 @@ state.querySet = mockedMessageDtoList;
buildTable(); buildTable();
function pagination(querySet, page, rows) { function pagination(querySet, page, rows) {
var trimStart = (page - 1) * rows var trimStart = (page - 1) * rows
var trimEnd = trimStart + rows var trimEnd = trimStart + rows
var trimmedData = querySet.slice(trimStart, trimEnd) var trimmedData = querySet.slice(trimStart, trimEnd)
@@ -75,7 +76,6 @@ function buildTable() {
var data = pagination(state.querySet, state.page, state.rows) var data = pagination(state.querySet, state.page, state.rows)
var myList = data.querySet var myList = data.querySet
for(var i = 1; i<=myList.length; i++){ for(var i = 1; i<=myList.length; i++){
var j = i + (state.page-1) * 10; var j = i + (state.page-1) * 10;
if(i%2 === 0){ if(i%2 === 0){
@@ -84,6 +84,16 @@ function buildTable() {
<td>${myList[i-1].mockedResponseId}</td> <td>${myList[i-1].mockedResponseId}</td>
<td>${myList[i-1].mediaType}</td> <td>${myList[i-1].mediaType}</td>
<td>${myList[i-1].httpStatus}</td> <td>${myList[i-1].httpStatus}</td>
<td>
<button type="submit" name="updateMessage" value="${myList[i-1].mockedResponseId}">
<img src="/img/update-button.png" style="width: 20px;"/>
</button>
</td>
<td>
<button type="submit" name="removeMessage" value="${myList[i-1].mockedResponseId}">
<img src="/img/icons8-cancel-64.png" style="width: 20px;"/>
</button>
</td>
` `
}else{ }else{
var row = `<tr bgcolor="#e6ffff"> var row = `<tr bgcolor="#e6ffff">
@@ -91,6 +101,16 @@ function buildTable() {
<td>${myList[i-1].mockedResponseId}</td> <td>${myList[i-1].mockedResponseId}</td>
<td>${myList[i-1].mediaType}</td> <td>${myList[i-1].mediaType}</td>
<td>${myList[i-1].httpStatus}</td> <td>${myList[i-1].httpStatus}</td>
<td>
<button type="submit" name="updateMessage" value="${myList[i-1].mockedResponseId}">
<img src="/img/update-button.png" style="width: 20px;"/>
</button>
</td>
<td>
<button type="submit" name="removeMessage" value="${myList[i-1].mockedResponseId}">
<img src="/img/icons8-cancel-64.png" style="width: 20px;"/>
</button>
</td>
` `
} }

View File

@@ -10,14 +10,11 @@
</head> </head>
<body> <body>
<hr> <hr>
<div><br>In order to set mockup response please fill the form below:
</div>
<section class="page-section" id="main-section" > <section class="page-section" id="main-section" >
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="column" > <div class="column" >
<br>You can also simply fill and submit the below form: <br>In order to set mockup response please fill the form below:
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}" <form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post"> th:object="${mockedMessageDto}" method="post">
<table> <table>
@@ -93,6 +90,7 @@
</div> </div>
<div class="column"> <div class="column">
<br> <br>
<form th:action="@{/home/__${mockedMessageDto.clientUUID}__}" method="post" id="dupa" >
<table> <table>
<thead> <thead>
<tr> <tr>
@@ -102,15 +100,14 @@
<th class="tr-pageable">Http Status</th> <th class="tr-pageable">Http Status</th>
</tr> </tr>
</thead> </thead>
<tbody id="table-body"> <tbody id="table-body">
</tbody>
</tbody>
</table> </table>
</div> </form>
<div class="container "> <div class="container ">
<div id="pagination-wrapper"></div> <div id="pagination-wrapper"></div>
</div> </div>
</div>
</div> </div>
</div> </div>
@@ -124,6 +121,8 @@
<br>In order to set or get responses through curl or http tools you can use urls below. <br>In order to set or get responses through curl or http tools you can use urls below.
<br>When you set your response simply set headers and media type of your request that you expect to get in the <br>When you set your response simply set headers and media type of your request that you expect to get in the
response from the next step. response from the next step.
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/delete/<a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/set/ <a <br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/set/ <a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}?httpStatus={httpStatus} th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}?httpStatus={httpStatus}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/get/<a <br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/get/<a
@@ -135,12 +134,14 @@
<div> <div>
<br>To see your activity history use the form below <br>To see your activity history use the form below
<form action="#" th:action="@{/eventsForm}" th:object="${eventsDto}" method="post"> <form action="#" th:action="@{/eventsForm}" th:object="${eventRequestDto}" method="post">
<input type="text" th:name="clientUUID" th:value="${mockedMessageDto.clientUUID}" hidden/> <input type="text" th:name="clientUUID" th:value="${mockedMessageDto.clientUUID}" hidden/>
<br><label>Mocked response id:</label><br>
<input type="text" th:name="mockedResponseId" th:id="mockedResponseId" th:placeholder="all"/>
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">mockedResponseId error</td>
<br><label>Date from:</label><br> <br><label>Date from:</label><br>
<input type="datetime-local" th:field="*{localDateTimeFrom}"/> <input type="datetime-local" th:field="*{localDateTimeFrom}"/>
<td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom Error <td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom Error</td>
</td>
<br><label>Date to:</label><br> <br><label>Date to:</label><br>
<input type="datetime-local" th:field="*{localDateTimeTo}"/> <input type="datetime-local" th:field="*{localDateTimeTo}"/>
<td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo Error</td> <td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo Error</td>

View File

@@ -10,7 +10,7 @@ import org.springframework.stereotype.Component;
@Generated( @Generated(
value = "org.mapstruct.ap.MappingProcessor", value = "org.mapstruct.ap.MappingProcessor",
date = "2020-09-09T10:30:58+0200", date = "2020-09-09T17:18:22+0200",
comments = "version: 1.3.1.Final, compiler: javac, environment: Java 14.0.1 (Oracle Corporation)" comments = "version: 1.3.1.Final, compiler: javac, environment: Java 14.0.1 (Oracle Corporation)"
) )
@Component @Component