- finishing etrack

- new buttons for main page
- swagger
This commit is contained in:
Szakalakamaka
2020-09-22 10:05:11 +02:00
parent 9f3f2161cb
commit db625b650b
68 changed files with 1736 additions and 494 deletions

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.google.guava:guava:18.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/18.0/guava-18.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/18.0/guava-18.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/18.0/guava-18.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-core:2.7.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-core/2.7.0/springfox-core-2.7.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-core/2.7.0/springfox-core-2.7.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-core/2.7.0/springfox-core-2.7.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-schema:2.7.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-schema/2.7.0/springfox-schema-2.7.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-schema/2.7.0/springfox-schema-2.7.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-schema/2.7.0/springfox-schema-2.7.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-spi:2.7.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spi/2.7.0/springfox-spi-2.7.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spi/2.7.0/springfox-spi-2.7.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spi/2.7.0/springfox-spi-2.7.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-spring-web:2.7.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spring-web/2.7.0/springfox-spring-web-2.7.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spring-web/2.7.0/springfox-spring-web-2.7.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-spring-web/2.7.0/springfox-spring-web-2.7.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger2:2.7.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger2/2.7.0/springfox-swagger2-2.7.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger2/2.7.0/springfox-swagger2-2.7.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger2/2.7.0/springfox-swagger2-2.7.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger-common:2.7.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-common/2.7.0/springfox-swagger-common-2.7.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-common/2.7.0/springfox-swagger-common-2.7.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-common/2.7.0/springfox-swagger-common-2.7.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger-ui:2.7.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-ui/2.7.0/springfox-swagger-ui-2.7.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-ui/2.7.0/springfox-swagger-ui-2.7.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/springfox/springfox-swagger-ui/2.7.0/springfox-swagger-ui-2.7.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.swagger:swagger-annotations:1.5.13">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/swagger/swagger-annotations/1.5.13/swagger-annotations-1.5.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/swagger/swagger-annotations/1.5.13/swagger-annotations-1.5.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/swagger/swagger-annotations/1.5.13/swagger-annotations-1.5.13-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: io.swagger:swagger-models:1.5.13">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/swagger/swagger-models/1.5.13/swagger-models-1.5.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/swagger/swagger-models/1.5.13/swagger-models-1.5.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/swagger/swagger-models/1.5.13/swagger-models-1.5.13-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: org.javassist:javassist:3.21.0-GA">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

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

View File

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

View File

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

View File

@@ -1,114 +0,0 @@
Index: src/main/java/com/release11/klaus/mappers/MockedMessageMapper.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/release11/klaus/mappers/MockedMessageMapper.java (date 1599560197073)
+++ src/main/java/com/release11/klaus/mappers/MockedMessageMapper.java (date 1599560197073)
@@ -0,0 +1,13 @@
+package com.release11.klaus.mappers;
+
+import com.release11.klaus.model.MockedMessage;
+import com.release11.klaus.model.MockedMessageDto;
+import org.mapstruct.*;
+
+@Mapper
+public interface MockedMessageMapper {
+ @Mapping( target = "compositePrimaryKey", expression = "java(mockedMessageDto.getClientUUID() + \"_\"" +
+ " + mockedMessageDto.getMockedResponseId())")
+ MockedMessage mockedMessageDtoToMockedMessage(MockedMessageDto mockedMessageDto);
+ MockedMessageDto mockedMessageToMockedMessageDto(MockedMessage mockedMessage);
+}
Index: src/main/java/com/release11/klaus/model/MockedMessage.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/release11/klaus/model/MockedMessage.java (date 1599557591277)
+++ src/main/java/com/release11/klaus/model/MockedMessage.java (date 1599557591277)
@@ -0,0 +1,53 @@
+package com.release11.klaus.model;
+
+import com.release11.klaus.model.constraints.HttpCode;
+import lombok.*;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.redis.core.RedisHash;
+import org.springframework.data.redis.core.index.Indexed;
+
+import javax.validation.constraints.Positive;
+import java.io.Serializable;
+import java.util.Map;
+import java.util.UUID;
+
+@Data
+@ToString
+@RedisHash("mockedMessage")
+@NoArgsConstructor
+@AllArgsConstructor
+public class MockedMessage implements Serializable {
+ @Id
+ private String compositePrimaryKey;
+ @Indexed
+ private UUID clientUUID;
+ @Positive
+ private int mockedResponseId;
+ private String mediaType;
+ private String messageBody;
+ private Map<String, String> httpHeaders;
+ @HttpCode
+ 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;
+ }
+}
+
+
Index: src/main/java/com/release11/klaus/model/MockedMessageDto.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/main/java/com/release11/klaus/model/MockedMessageDto.java (date 1599553108395)
+++ src/main/java/com/release11/klaus/model/MockedMessageDto.java (date 1599553108395)
@@ -0,0 +1,24 @@
+package com.release11.klaus.model;
+
+import com.release11.klaus.model.constraints.HttpCode;
+import lombok.*;
+
+import javax.validation.constraints.Positive;
+import java.util.Map;
+import java.util.UUID;
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class MockedMessageDto {
+ private UUID clientUUID;
+ @Positive
+ private int mockedResponseId;
+ private String mediaType;
+ private String messageBody;
+ private Map<String, String> httpHeaders;
+ @HttpCode
+ private Integer httpStatus;
+}

View File

@@ -0,0 +1,4 @@
<changelist name="Uncommitted_changes_before_Update_at_09_09_2020_11_06_[Default_Changelist]" date="1599642401601" recycled="true" deleted="true">
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_09_09_2020_11_06_[Default_Changelist]/shelved.patch" />
<option name="DESCRIPTION" value="Uncommitted changes before Update at 09.09.2020 11:06 [Default Changelist]" />
</changelist>

312
.idea/workspace.xml generated
View File

@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="BranchesTreeState">
<expand>
<path>
@@ -20,14 +23,10 @@
</component>
<component name="ChangeListManager">
<list default="true" id="458cde88-df3d-44bc-9d57-a33823e2f1a6" name="Default Changelist" comment="">
<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/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 afterPath="$PROJECT_DIR$/src/main/java/com/release11/klaus/controller/MainController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/templates/tools.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" 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>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -44,6 +43,7 @@
<option name="RECENT_TEMPLATES">
<list>
<option value="Interface" />
<option value="HTML File" />
<option value="Class" />
</list>
</option>
@@ -51,6 +51,13 @@
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="mavenHome" value="C:\Users\rafzu\.m2\wrapper\dists\apache-maven-3.6.3-bin\1iopthnavndlasol9gbrbg6bf2\apache-maven-3.6.3" />
</MavenGeneralSettings>
</option>
</component>
<component name="ProjectCodeStyleSettingsMigration">
<option name="version" value="1" />
</component>
@@ -63,29 +70,34 @@
</component>
<component name="PropertiesComponent">
<property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
<property name="DefaultHtmlFileTemplate" value="HTML File" />
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="restartRequiresConfirmation" value="false" />
<property name="settings.editor.selected.configurable" value="reference.projectsettings.compiler.annotationProcessors" />
</component>
<component name="RecentsManager">
<key name="CreateClassDialog.RecentsKey">
<recent name="com.release11.klaus.repository" />
<recent name="com.release11.klaus.service" />
</key>
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\img" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\images" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\assets\img" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\css" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\js" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\assets\img" />
</key>
<key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
<recent name="com.release11.klaus.repository" />
</key>
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\js" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\templates" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\img" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\images" />
<recent name="D:\git\Szakalakamaka\Klaus\src\main\resources\static\assets\img" />
</key>
<key name="CreateClassDialog.RecentsKey">
<recent name="com.release11.klaus.repository" />
<recent name="com.release11.klaus.service" />
</key>
</component>
<component name="RunManager" selected="Application.KlausApplication">
<configuration name="KlausApplication" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
@@ -115,7 +127,6 @@
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
<option name="BSP.BeforeRunTask" enabled="true" />
</method>
</configuration>
<configuration name="MockedResponseRedisRepositoryTest.getMockedResponse" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
@@ -132,7 +143,6 @@
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
<option name="BSP.BeforeRunTask" enabled="true" />
</method>
</configuration>
<configuration name="MockedResponseRedisRepositoryTest.setMockedResponse" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
@@ -149,7 +159,6 @@
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
<option name="BSP.BeforeRunTask" enabled="true" />
</method>
</configuration>
<configuration name="RedisConfigTest.jedisPool" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
@@ -166,14 +175,6 @@
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
<option name="BSP.BeforeRunTask" enabled="true" />
</method>
</configuration>
<configuration default="true" type="JUnit" factoryName="JUnit">
<option name="TEST_OBJECT" value="class" />
<method v="2">
<option name="Make" enabled="true" />
<option name="BSP.BeforeRunTask" enabled="true" />
</method>
</configuration>
<recent_temporary>
@@ -186,6 +187,7 @@
</list>
</recent_temporary>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="project-level" UseSingleDictionary="true" transferred="true" />
<component name="SvnConfiguration">
<configuration />
</component>
@@ -414,9 +416,89 @@
<option name="project" value="LOCAL" />
<updated>1599739605273</updated>
</task>
<option name="localTasksCounter" value="32" />
<task id="LOCAL-00032" summary="adding &quot;new message&quot; button">
<created>1599823953914</created>
<option name="number" value="00032" />
<option name="presentableId" value="LOCAL-00032" />
<option name="project" value="LOCAL" />
<updated>1599823953914</updated>
</task>
<task id="LOCAL-00033" summary="etrack">
<created>1599843413391</created>
<option name="number" value="00033" />
<option name="presentableId" value="LOCAL-00033" />
<option name="project" value="LOCAL" />
<updated>1599843413391</updated>
</task>
<task id="LOCAL-00034" summary="new buttons">
<created>1600264905901</created>
<option name="number" value="00034" />
<option name="presentableId" value="LOCAL-00034" />
<option name="project" value="LOCAL" />
<updated>1600264905901</updated>
</task>
<task id="LOCAL-00035" summary="new buttons">
<created>1600274683546</created>
<option name="number" value="00035" />
<option name="presentableId" value="LOCAL-00035" />
<option name="project" value="LOCAL" />
<updated>1600274683547</updated>
</task>
<task id="LOCAL-00036" summary="sorting">
<created>1600275750768</created>
<option name="number" value="00036" />
<option name="presentableId" value="LOCAL-00036" />
<option name="project" value="LOCAL" />
<updated>1600275750768</updated>
</task>
<task id="LOCAL-00037" summary="fixing update, delete buttons">
<created>1600350275241</created>
<option name="number" value="00037" />
<option name="presentableId" value="LOCAL-00037" />
<option name="project" value="LOCAL" />
<updated>1600350275241</updated>
</task>
<task id="LOCAL-00038" summary="sort buttons for etrack">
<created>1600351822394</created>
<option name="number" value="00038" />
<option name="presentableId" value="LOCAL-00038" />
<option name="project" value="LOCAL" />
<updated>1600351822394</updated>
</task>
<task id="LOCAL-00039" summary="js small fixes">
<created>1600679481427</created>
<option name="number" value="00039" />
<option name="presentableId" value="LOCAL-00039" />
<option name="project" value="LOCAL" />
<updated>1600679481427</updated>
</task>
<task id="LOCAL-00040" summary="js fix sort paggination, show body for etrack">
<created>1600688851318</created>
<option name="number" value="00040" />
<option name="presentableId" value="LOCAL-00040" />
<option name="project" value="LOCAL" />
<updated>1600688851319</updated>
</task>
<task id="LOCAL-00041" summary="changing events describtion">
<created>1600693252935</created>
<option name="number" value="00041" />
<option name="presentableId" value="LOCAL-00041" />
<option name="project" value="LOCAL" />
<updated>1600693252935</updated>
</task>
<task id="LOCAL-00042" summary="swagger">
<created>1600702429235</created>
<option name="number" value="00042" />
<option name="presentableId" value="LOCAL-00042" />
<option name="project" value="LOCAL" />
<updated>1600702429235</updated>
</task>
<option name="localTasksCounter" value="43" />
<servers />
</component>
<component name="UnknownFeatures">
<option featureType="com.intellij.fileTypeFactory" implementationName="*.js" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
@@ -431,16 +513,6 @@
</component>
<component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
<MESSAGE value="Adding logic for events" />
<MESSAGE value="html form for events" />
<MESSAGE value="get events by days" />
<MESSAGE value="fix for passing default clientUUID in the html form" />
<MESSAGE value="read events based on dates and clientUUID" />
<MESSAGE value="updating html pages" />
<MESSAGE value="MvcExceptionHandler" />
<MESSAGE value="Etrack works!!!" />
<MESSAGE value="iml fix" />
<MESSAGE value="adding missing classes" />
<MESSAGE value="- changing design of index.html&#10;- dynamic localhost value&#10;- adding possibility to access the page with clientUUID value in path variable to be able to continue your work faster" />
<MESSAGE value="- changing log appender's DB" />
<MESSAGE value="Refactoring:&#10;- add new headers form&#10;- global Model Attributes" />
@@ -456,7 +528,17 @@
<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" />
<MESSAGE value="adding &quot;new message&quot; button" />
<MESSAGE value="etrack" />
<MESSAGE value="new buttons" />
<MESSAGE value="sorting" />
<MESSAGE value="fixing update, delete buttons" />
<MESSAGE value="sort buttons for etrack" />
<MESSAGE value="js small fixes" />
<MESSAGE value="js fix sort paggination, show body for etrack" />
<MESSAGE value="changing events describtion" />
<MESSAGE value="swagger" />
<option name="LAST_COMMIT_MESSAGE" value="swagger" />
</component>
<component name="WindowStateProjectService">
<state x="574" y="128" key="#com.intellij.ide.util.MemberChooser" timestamp="1599641773245">
@@ -467,9 +549,10 @@
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="432" y="337" key="#com.intellij.refactoring.move.MoveHandler.SelectRefactoringDialog/0.0.1536.824@0.0.1536.824" timestamp="1599492129736" />
<state x="551" y="281" width="433" height="267" key="#com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesDialog.classes" timestamp="1599555208141">
<screen x="0" y="0" width="1536" height="824" />
<state x="2609" y="355" width="433" height="268" key="#com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesDialog.classes" timestamp="1599855743909">
<screen x="1920" y="0" width="1920" height="1040" />
</state>
<state x="2609" y="355" width="433" height="268" key="#com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesDialog.classes/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599855743909" />
<state x="551" y="281" width="433" height="267" key="#com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesDialog.classes/0.0.1536.824@0.0.1536.824" timestamp="1599555208141" />
<state x="178" y="0" key="#com.intellij.refactoring.rename.AutomaticRenamingDialog" timestamp="1599551270234">
<screen x="0" y="0" width="1536" height="824" />
@@ -480,68 +563,81 @@
</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="549" y="167" key="FileChooserDialogImpl" timestamp="1599642328449">
<state x="549" y="167" key="FileChooserDialogImpl" timestamp="1599811504031">
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="549" y="167" key="FileChooserDialogImpl/0.0.1536.824@0.0.1536.824" timestamp="1599642328449" />
<state width="1877" height="339" key="GridCell.Tab.0.bottom" timestamp="1599740809314">
<screen x="1920" y="0" width="1920" height="1040" />
<state x="549" y="167" key="FileChooserDialogImpl/0.0.1536.824@0.0.1536.824" timestamp="1599811504031" />
<state width="724" height="36" key="GridCell.Tab.0.bottom" timestamp="1600711795274">
<screen x="0" y="0" width="1536" height="824" />
</state>
<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="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="1877" height="339" key="GridCell.Tab.0.center" timestamp="1599740809314">
<screen x="1920" y="0" width="1920" height="1040" />
<state width="1877" height="239" key="GridCell.Tab.0.bottom/-1920.0.1536.832/0.0.1920.1040@0.0.1920.1040" timestamp="1600275797041" />
<state width="1493" height="71" key="GridCell.Tab.0.bottom/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600350133448" />
<state width="1877" height="71" key="GridCell.Tab.0.bottom/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1600351762712" />
<state width="724" height="36" key="GridCell.Tab.0.bottom/0.0.1536.824@0.0.1536.824" timestamp="1600711795274" />
<state width="724" height="36" key="GridCell.Tab.0.center" timestamp="1600711795274">
<screen x="0" y="0" width="1536" height="824" />
</state>
<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="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="1877" height="339" key="GridCell.Tab.0.left" timestamp="1599740809314">
<screen x="1920" y="0" width="1920" height="1040" />
<state width="1877" height="239" key="GridCell.Tab.0.center/-1920.0.1536.832/0.0.1920.1040@0.0.1920.1040" timestamp="1600275797041" />
<state width="1493" height="71" key="GridCell.Tab.0.center/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600350133447" />
<state width="1877" height="71" key="GridCell.Tab.0.center/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1600351762712" />
<state width="724" height="36" key="GridCell.Tab.0.center/0.0.1536.824@0.0.1536.824" timestamp="1600711795274" />
<state width="724" height="36" key="GridCell.Tab.0.left" timestamp="1600711795274">
<screen x="0" y="0" width="1536" height="824" />
</state>
<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="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="1877" height="339" key="GridCell.Tab.0.right" timestamp="1599740809314">
<screen x="1920" y="0" width="1920" height="1040" />
<state width="1877" height="239" key="GridCell.Tab.0.left/-1920.0.1536.832/0.0.1920.1040@0.0.1920.1040" timestamp="1600275797041" />
<state width="1493" height="71" key="GridCell.Tab.0.left/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600350133447" />
<state width="1877" height="71" key="GridCell.Tab.0.left/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1600351762711" />
<state width="724" height="36" key="GridCell.Tab.0.left/0.0.1536.824@0.0.1536.824" timestamp="1600711795274" />
<state width="724" height="36" key="GridCell.Tab.0.right" timestamp="1600711795274">
<screen x="0" y="0" width="1536" height="824" />
</state>
<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="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="1877" height="339" key="GridCell.Tab.1.bottom" timestamp="1599740809315">
<screen x="1920" y="0" width="1920" height="1040" />
<state width="1877" height="239" key="GridCell.Tab.0.right/-1920.0.1536.832/0.0.1920.1040@0.0.1920.1040" timestamp="1600275797041" />
<state width="1493" height="71" key="GridCell.Tab.0.right/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600350133448" />
<state width="1877" height="71" key="GridCell.Tab.0.right/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1600351762712" />
<state width="724" height="36" key="GridCell.Tab.0.right/0.0.1536.824@0.0.1536.824" timestamp="1600711795274" />
<state width="1493" height="261" key="GridCell.Tab.1.bottom" timestamp="1600697207730">
<screen x="0" y="0" width="1536" height="824" />
</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="1877" height="339" key="GridCell.Tab.1.center" timestamp="1599740809315">
<screen x="1920" y="0" width="1920" height="1040" />
<state width="1493" height="198" key="GridCell.Tab.1.bottom/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600349461044" />
<state width="1493" height="198" key="GridCell.Tab.1.bottom/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599850734006" />
<state width="1493" height="261" key="GridCell.Tab.1.bottom/0.0.1536.824@0.0.1536.824" timestamp="1600697207730" />
<state width="1493" height="261" key="GridCell.Tab.1.center" timestamp="1600697207730">
<screen x="0" y="0" width="1536" height="824" />
</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="1877" height="339" key="GridCell.Tab.1.left" timestamp="1599740809315">
<screen x="1920" y="0" width="1920" height="1040" />
<state width="1493" height="198" key="GridCell.Tab.1.center/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600349461044" />
<state width="1493" height="198" key="GridCell.Tab.1.center/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599850734006" />
<state width="1493" height="261" key="GridCell.Tab.1.center/0.0.1536.824@0.0.1536.824" timestamp="1600697207730" />
<state width="1493" height="261" key="GridCell.Tab.1.left" timestamp="1600697207730">
<screen x="0" y="0" width="1536" height="824" />
</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="1877" height="339" key="GridCell.Tab.1.right" timestamp="1599740809315">
<screen x="1920" y="0" width="1920" height="1040" />
<state width="1493" height="198" key="GridCell.Tab.1.left/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600349461044" />
<state width="1493" height="198" key="GridCell.Tab.1.left/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599850734006" />
<state width="1493" height="261" key="GridCell.Tab.1.left/0.0.1536.824@0.0.1536.824" timestamp="1600697207730" />
<state width="1493" height="261" key="GridCell.Tab.1.right" timestamp="1600697207730">
<screen x="0" y="0" width="1536" height="824" />
</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="198" key="GridCell.Tab.1.right/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600349461044" />
<state width="1493" height="198" key="GridCell.Tab.1.right/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599850734006" />
<state width="1493" height="261" key="GridCell.Tab.1.right/0.0.1536.824@0.0.1536.824" timestamp="1600697207730" />
<state x="299" y="67" key="Maven.ArtifactSearchDialog" timestamp="1598862685882">
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="299" y="67" key="Maven.ArtifactSearchDialog/0.0.1536.824@0.0.1536.824" timestamp="1598862685882" />
<state x="2371" y="183" key="Vcs.Push.Dialog.v2" timestamp="1599739608235">
<screen x="1920" y="0" width="1920" height="1040" />
<state x="591" y="115" key="RollbackChangesDialog" timestamp="1600352883672">
<screen x="0" y="0" width="1536" height="824" />
</state>
<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="591" y="115" key="RollbackChangesDialog/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600352883672" />
<state x="277" y="57" key="SettingsEditor" timestamp="1600691411296">
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="277" y="57" key="SettingsEditor/0.0.1536.824@0.0.1536.824" timestamp="1600691411296" />
<state x="361" y="145" key="Vcs.Push.Dialog.v2" timestamp="1600702431016">
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="451" y="183" key="Vcs.Push.Dialog.v2/-1920.0.1536.832/0.0.1920.1040@0.0.1920.1040" timestamp="1600275760386" />
<state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1600350277680" />
<state x="2371" y="183" key="Vcs.Push.Dialog.v2/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1600351824385" />
<state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824@0.0.1536.824" timestamp="1600702431016" />
<state x="478" y="145" width="579" height="592" key="find.popup" timestamp="1599656923861">
<screen x="0" y="0" width="1536" height="824" />
</state>
@@ -555,38 +651,28 @@
<screen x="0" y="0" width="1536" height="824" />
</state>
<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 x="531" y="236" key="run.anything.popup" timestamp="1600270936259">
<screen x="0" y="0" width="1920" height="1040" />
</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="531" y="236" key="run.anything.popup/-1920.0.1536.832/0.0.1920.1040@0.0.1920.1040" timestamp="1600270936259" />
<state x="425" y="187" key="run.anything.popup/0.0.1536.824/1920.0.1920.1040@0.0.1536.824" timestamp="1599846632766" />
<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">
<screen x="0" y="0" width="1536" height="824" />
<state x="2459" y="183" width="840" height="856" key="search.everywhere.popup" timestamp="1599855564520">
<screen x="1920" y="0" width="1920" height="1040" />
</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="2459" y="183" width="840" height="856" key="search.everywhere.popup/0.0.1536.824/1920.0.1920.1040@1920.0.1920.1040" timestamp="1599855564520" />
<state x="431" y="145" width="672" height="678" key="search.everywhere.popup/0.0.1536.824@0.0.1536.824" timestamp="1599818806371" />
</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>54</line>
<properties>
<option name="lambda-ordinal" value="-1" />
</properties>
<option name="timeStamp" value="2" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>

View File

@@ -30,7 +30,6 @@
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0" level="project" />
@@ -73,7 +72,7 @@
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.13" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.11" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.11" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.11" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
@@ -89,7 +88,6 @@
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.1.RELEASE" level="project" />
@@ -110,5 +108,21 @@
<orderEntry type="library" name="Maven: redis.clients:jedis:3.3.0" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.7.0" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.13" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.13" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.7.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.7.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.7.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.7.0" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.7.0" level="project" />
<orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:18.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.7.0" level="project" />
</component>
</module>

View File

@@ -8,3 +8,7 @@ Available scripts:
### docker-compose up -d --build
Builds and launches Redis service and the application. Performs unit testing on the code and run the application.
Plugins:
settings -> plugins -> install lombok plugin
settings -> annotation processors -> enable annotation processing

10
pom.xml
View File

@@ -85,6 +85,16 @@
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
<build>

View File

@@ -2,6 +2,7 @@ package com.release11.klaus;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@@ -12,10 +13,5 @@ public class KlausApplication {
}
}
//TODO
//TODO JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisHost, redisPort, timeout, redisPassword)
//TODO JedisPool optimalization https://partners-intl.aliyun.com/help/doc-detail/98726.htm
// logging, security, account creation
// tracking clients activity, admin panel
// use a centralized logging collection tool like logstash for admin panel
//TODO swagger

View File

@@ -0,0 +1,24 @@
package com.release11.klaus.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import static springfox.documentation.builders.PathSelectors.regex;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.basePackage("com.release11.klaus.controller"))
.paths(regex("/klaus/v1.*"))
.build();
}
}

View File

@@ -1,16 +1,22 @@
package com.release11.klaus.controller;
import com.release11.klaus.model.Event;
import com.release11.klaus.model.EventRequestDto;
import com.release11.klaus.service.EtrackService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
@Slf4j
@Controller
@@ -19,11 +25,54 @@ import javax.validation.Valid;
public class EventController {
private final EtrackService etrackService;
@PostMapping("/eventsForm")
@ResponseBody
public String getLogs(@Valid EventRequestDto eventsDto, BindingResult bindingResult){
return String.valueOf(etrackService.getEventsByDateTimeAndBusinessKeys(eventsDto));
private final String sortBy = "messageId";
private final List<Event> eventList = new LinkedList<>();
@GetMapping("/etrack/{uuid}")
public String showEtrack(@Valid EventRequestDto eventRequestDto, @PathVariable UUID uuid, final Model model,
BindingResult bindingResult){
model.addAttribute("clientUUID", uuid);
model.addAttribute("eventRequestDto", eventRequestDto);
return "etrack";
}
@PostMapping("/etrack/{uuid}")
public String getLogs(@Valid EventRequestDto eventRequestDto, final Model model, BindingResult bindingResult,
@PathVariable UUID uuid){
model.addAttribute("clientUUID", uuid);
populateModelWithLists(model, eventRequestDto, true);
return "etrack";
}
@PostMapping(value = "/etrack/{uuid}", params = {"sortBy"})
public String sortBy(@Valid EventRequestDto eventRequestDto, final Model model, BindingResult bindingResult,
@PathVariable UUID uuid){
model.addAttribute("clientUUID", uuid);
populateModelWithLists(model, eventRequestDto, false);
return "etrack";
}
private void populateModelWithLists(Model model, EventRequestDto eventRequestDto, boolean updateList){
if (updateList){
eventList.clear();
eventList.addAll(etrackService.getEventsByDateTimeAndBusinessKeys(eventRequestDto));
}
model.addAttribute("eventList", eventList);
}
@ModelAttribute("eventRequestDto")
public EventRequestDto eventRequestDto() {
return EventRequestDto.builder()
.mockedResponseId(1)
.localDateTimeFrom(LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
.localDateTimeTo(LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIDNIGHT))
.build();
}
@ModelAttribute("eventList")
public List<Event> eventList() {
return eventList;
}
}

View File

@@ -12,10 +12,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@@ -29,7 +26,7 @@ public class KlausController {
private final KlausService klausService;
@RequestMapping(value = "klaus/v1/delete/{clientUUID}/{mockedResponseId}")
@DeleteMapping(value = "klaus/v1/delete/{clientUUID}/{mockedResponseId}")
public ResponseEntity<String> deleteMockedResponse(@PathVariable UUID clientUUID,
@PathVariable int mockedResponseId){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "deleteMockedResponse",
@@ -38,9 +35,10 @@ public class KlausController {
klausService.deleteMockedResponse(clientUUID, mockedResponseId);
return new ResponseEntity<>("message has been deleted", HttpStatus.OK);
}
@RequestMapping(value = "klaus/v1/getAll/{clientUUID}")
@GetMapping(value = "klaus/v1/getAll/{clientUUID}")
public ResponseEntity<String> getAllMockedResponses(@PathVariable UUID clientUUID){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse",
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getAllMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
BusinessKey.MESSAGE_ID, "all"));
List<MockedMessageDto> mockedMessages = klausService.getAllMockedResponses(clientUUID);

View File

@@ -1,6 +1,5 @@
package com.release11.klaus.controller;
import com.release11.klaus.model.EventRequestDto;
import com.release11.klaus.model.MockedMessageDto;
import com.release11.klaus.service.KlausService;
import com.release11.klaus.utilis.BusinessKey;
@@ -16,9 +15,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.net.InetAddress;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
@Slf4j
@@ -29,11 +25,6 @@ public class KlausMvcController {
private final KlausService klausService;
private final Set<MockedMessageDto> globalMockedMessageDtoList = new HashSet<>();
@GetMapping("/login")
public String login() {
return "login";
}
@SneakyThrows
@GetMapping({"/home", "/home/{uuid}"})
public String showHome(final MockedMessageDto mockedMessageDto, final Model model,
@@ -45,15 +36,28 @@ public class KlausMvcController {
return "index";
}
@PostMapping("/home/{clientUUID}")
@PostMapping("/home/{uuid}")
public String showHomePost(@Valid final MockedMessageDto mockedMessageDto, BindingResult bindingResult,
final Model model) {
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "setMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(mockedMessageDto.getClientUUID()),
BusinessKey.MESSAGE_ID, String.valueOf(mockedMessageDto.getMockedResponseId())));
if (bindingResult.hasErrors()){
populateModelWithLists(model, mockedMessageDto,false);
return "index";
}
klausService.setMockedResponse(mockedMessageDto);
populateModelWithLists(model, mockedMessageDto,true);
model.addAttribute("mockSaved", "true");
model.addAttribute("canTest", "true");
return "index";
}
@PostMapping(value="/home/{uuid}", params={"newMessage"})
public String newMessage(final Model model, @RequestParam UUID clientUUID) {
MockedMessageDto mockedMessageDto = new MockedMessageDto(clientUUID, new LinkedHashMap<>());
populateModelWithLists(model, mockedMessageDto, true);
model.addAttribute("mockedMessageDto", mockedMessageDto);
return "index";
}
@@ -67,7 +71,7 @@ public class KlausMvcController {
mockedMessageDto.getMockedResponseId()).toString();
}
@RequestMapping(value = "/home/{clientUUID}", params = {"addHeader"} )
@PostMapping(value = "/home/{uuid}", params = {"addHeader"} )
public String addHeader(final MockedMessageDto mockedMessageDto, @RequestParam String headerKey,
@RequestParam String headerValue, final Model model) {
populateModelWithLists(model, mockedMessageDto,false);
@@ -75,23 +79,27 @@ public class KlausMvcController {
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"removeHeader"})
@PostMapping(value="/home/{uuid}", params={"removeHeader"})
public String removeHeader(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) {
populateModelWithLists(model, mockedMessageDto,false);
mockedMessageDto.getHttpHeaders().remove(req.getParameter("removeHeader"));
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"updateMessage"})
@PostMapping(value="/home/{uuid}", 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);
model.addAttribute("canTest", "true");
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"removeMessage"})
@PostMapping(value="/home/{uuid}", params={"removeMessage"})
public String removeMessage(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) {
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "deleteMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(mockedMessageDto.getClientUUID()),
BusinessKey.MESSAGE_ID, String.valueOf(Integer.parseInt(req.getParameter("removeMessage")))));
klausService.deleteMockedResponse(mockedMessageDto.getClientUUID(),
Integer.parseInt(req.getParameter("removeMessage")));
populateModelWithLists(model, mockedMessageDto, true);
@@ -111,17 +119,7 @@ public class KlausMvcController {
@ModelAttribute("mockedMessageDto")
public MockedMessageDto mockedMessageDto() {
return new MockedMessageDto(UUID.randomUUID(), 1,
"application/xml", "body", new LinkedHashMap<>(), 200);
}
@ModelAttribute("eventRequestDto")
public EventRequestDto eventRequestDto() {
return EventRequestDto.builder()
.mockedResponseId(1)
.localDateTimeFrom(LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
.localDateTimeTo(LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIDNIGHT))
.build();
return new MockedMessageDto(UUID.randomUUID(), new LinkedHashMap<>());
}
private void populateModelWithLists(Model model, MockedMessageDto mockedMessageDto, boolean updateList){

View File

@@ -0,0 +1,20 @@
package com.release11.klaus.controller;
import com.release11.klaus.model.MockedMessageDto;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Slf4j
@Controller
@RequestMapping
@AllArgsConstructor
public class MainController {
@GetMapping("/home/tools")
public String showGetMockedResponse(final MockedMessageDto mockedMessageDto) {
return "tools";
}
}

View File

@@ -16,12 +16,15 @@ public class Event {
@DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
private LocalDateTime dateTimeStamp;
@Nullable
private String[] businessKeys;
private String interfaceName;
@Nullable
private String clientUUID;
@Nullable
private Integer messageId;
private String thread;
private String level;
@Nullable
private String message;
}
//{"date" : "%d{yyyy-MM-dd}", "timestamp":"%d{HH:mm:ss}", "businessKeys": {"interfaceName": "%X{interfaceName}",
// "clientUUID": "%X{clientUUID}", "messageId": "%X{messageId}"},"thread":"%t","level":"%-5level", "message":"%msg"}%n

View File

@@ -1,7 +1,10 @@
package com.release11.klaus.model;
import com.release11.klaus.model.constraints.HttpCode;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;
@@ -22,7 +25,7 @@ public class MockedMessage implements Serializable {
@Indexed
private UUID clientUUID;
@Positive
private int mockedResponseId;
private Integer mockedResponseId;
private String mediaType;
private String messageBody;
private Map<String, String> httpHeaders;

View File

@@ -3,6 +3,7 @@ package com.release11.klaus.model;
import com.release11.klaus.model.constraints.HttpCode;
import lombok.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import java.util.Map;
import java.util.UUID;
@@ -14,11 +15,20 @@ import java.util.UUID;
@AllArgsConstructor
public class MockedMessageDto {
private UUID clientUUID;
@NotNull
@Positive
private int mockedResponseId;
private Integer mockedResponseId;
private String mediaType;
private String messageBody;
private Map<String, String> httpHeaders;
@HttpCode
private Integer httpStatus;
public MockedMessageDto(UUID clientUUID) {
this.clientUUID = clientUUID;
}
public MockedMessageDto(UUID clientUUID, Map<String,String> httpHeaders) {
this.clientUUID = clientUUID;
this.httpHeaders = httpHeaders;
}
}

View File

@@ -50,14 +50,11 @@ public class EventRepositoryImpl implements EventRepository {
}
private List<String> businessKeysFilter(List<String> events, Map<BusinessKey, String> businessKeys) {
List<String> resultList = new ArrayList<>();
for (Map.Entry<BusinessKey, String> entry : businessKeys.entrySet()) {
String stringPattern = "\"" + entry.getKey() + ":" + entry.getValue() + "\"";
String u;
u = "das";
resultList = events.stream().filter(s -> s.contains(stringPattern)).collect(Collectors.toList());
String stringPattern = entry.getKey().getReasonPhrase()+ "\"" + ":" + "\"" + entry.getValue() + "\"";
events = events.stream().filter(s -> s.contains(stringPattern)).collect(Collectors.toList());
}
return resultList;
return events;
}
private List<Event> parseEvents(List<String> eventStrings) {

View File

@@ -28,6 +28,7 @@ public class KlausServiceImpl implements KlausService {
public void deleteMockedResponse(UUID clientUUID, int mockedResponseId) {
String key = clientUUID.toString() + "_" + mockedResponseId;
mockedResponseRepository.deleteById(key);
log.info("Message " + mockedResponseId + " has been removed.");
}
@Override
@@ -39,20 +40,22 @@ public class KlausServiceImpl implements KlausService {
@Override
public MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId) {
log.info("KlausServiceImpl, operation getMockedResponse, clientId {}, mockedResponseId {} ",
clientUUID, mockedResponseId);
String key = clientUUID.toString() + "_" + mockedResponseId;
Optional<MockedMessage> optionalMockedMessage = mockedResponseRepository.findById(key);
MockedMessageDto mockedMessageDto = new MockedMessageDto();
if (optionalMockedMessage.isPresent()) {
return mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get());
mockedMessageDto = mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get());
log.info(mockedMessageDto.toString());
return mockedMessageDto;
}
return new MockedMessageDto();
log.info(mockedMessageDto.toString());
return mockedMessageDto;
}
@Override
public ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto) {
mockedResponseRepository.save(mockedMessageMapper.mockedMessageDtoToMockedMessage(mockedMessageDto));
log.info("KlausServiceImpl, operation setMockedResponse, mockedMessage {} ", mockedMessageDto.toString());
log.info(mockedMessageDto.toString());
return new ResponseEntity<>("MockedResponse has been setup successfully!", new HttpHeaders(),
HttpStatus.ACCEPTED);
}

View File

@@ -10,7 +10,8 @@ public final class TrackingClient {
public static void setBusinessKeys(Map<BusinessKey, String> businessKeysMap){
for (Map.Entry<BusinessKey, String> entry : businessKeysMap.entrySet()) {
MDC.put(entry.getKey().toString(), entry.getValue());
String s= entry.getKey().getReasonPhrase();
MDC.put(entry.getKey().getReasonPhrase(), entry.getValue());
}
}

View File

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

View File

@@ -3,13 +3,14 @@
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!--https://github.com/kmtong/logback-redis-appender-->
<appender name="LOGSTASH" class="com.release11.klaus.utilis.RedisAppender">
<host>redis-server</host>
<host>localhost
</host>
<port>6379</port>
<key>logstash</key>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html-->
<Pattern>
{"dateTimeStamp" : "%d{yyyy-MM-dd}T%d{HH:mm:ss}", "businessKeys":["INTERFACE_NAME:%X{INTERFACE_NAME}", "CLIENT_UUID:%X{CLIENT_UUID}", "MESSAGE_ID:%X{MESSAGE_ID}"],"thread":"%t","level":"%-5level", "message":"%msg"}%n
{"dateTimeStamp" : "%d{yyyy-MM-dd}T%d{HH:mm:ss}", "eventId":"%X{eventId}", "interfaceName":"%X{interfaceName}", "clientUUID":"%X{clientUUID}", "messageId":"%X{messageId}", "thread":"%t","level":"%-5level", "message":"%msg"}%n
</Pattern>
</layout>
</appender>

View File

@@ -46,6 +46,10 @@ button:focus {
}
tr[name="tr-button"]:hover{
background-color: #ddd;
cursor: pointer;
}
#pagination-wrapper button {
background: none;
@@ -80,3 +84,28 @@ button[name="removeHeader"] {
transition: background-color 0.3s, color 0.3s;
}
.btn-sort {
border: 0;
padding: 0 20px;
text-align: center;
color: #fff;
text-shadow: 1px 1px 1px #000;
border-radius: 10px;
background-color: rgb(0, 102, 255);
background-image: linear-gradient(to top left,
rgba(0, 0, 0, .2),
rgba(0, 0, 0, .2) 30%,
rgba(0, 0, 0, 0));
}
.btn-sort:hover {
background-color: rgb(153, 194, 255);
cursor: pointer;
}
.active {
background-color: rgb(153, 194, 255);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

View File

@@ -0,0 +1,178 @@
var state = {
'querySet': [{
"clientUUID": "436c4774-038f-4540-9c18-2691ca9b53d4",
"mockedResponseId": 1908998,
"mediaType": "application/xml",
"messageBody": "body",
"httpHeaders": null,
"httpStatus": 200
}],
'page': 1,
'rows': 10,
'window': 5,
}
var myList, data, previousSort;
state.querySet = listForPagination;
buildTable();
for (let i = 3; i >= 0; i--) {
document.querySelector('#btn-sort-' + i).addEventListener('click', function() {
addButtonListeners(i)
})
}
function addButtonListeners(i) {
var buttons = document.querySelectorAll('.btn-sort');
for (var j = buttons.length - 1; j >= 0; j--) {
buttons[j].classList.remove('active');
}
document.querySelector('#btn-sort-' + i).classList.add('active');
buildTable();
}
function pagination(querySet, page, rows) {
var trimStart = (page - 1) * rows
var trimEnd = trimStart + rows
var trimmedData = querySet.slice(trimStart, trimEnd)
var pages = Math.ceil(querySet.length / rows);
if (pages === 0) {
pages = 1
}
return {
'querySet': trimmedData,
'pages': pages,
}
}
function pageButtons(pages) {
var wrapper = document.getElementById('pagination-wrapper');
wrapper.innerHTML = ``;
var maxLeft = (state.page - Math.floor(state.window / 2))
var maxRight = (state.page + Math.ceil(state.window / 2))
if (maxLeft < 1) {
maxLeft = 1
maxRight = state.window
}
if (maxRight > pages) {
maxLeft = pages - (state.window - 1)
if (maxLeft < 1) {
maxLeft = 1
}
maxRight = pages
}
for (var page = maxLeft; page <= maxRight; page++) {
if (page === state.page) {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info" name="allMessagesClicked">${page}</button>`
} else {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info">${page}</button>`
}
}
if (state.page != 1) {
wrapper.innerHTML = `<button value=${1} class="page btn btn-sm btn-info">&#171; First</button>` + wrapper.innerHTML
}
if (state.page != pages) {
wrapper.innerHTML += `<button value=${pages} class="page btn btn-sm btn-info">Last &#187;</button>`
}
$('.page').on('click', function() {
$('#table-body').empty()
state.page = Number($(this).val())
buildPage()
})
}
function showBody(elt){
$("#" + elt.id + "-body").toggle();
}
function showTable() {
var table = $('#table-body')
table.empty();
var color;
for (var i = 1; i <= myList.length; i++) {
var j = i + (state.page - 1) * 10;
i % 2 === 0 ? color = "#b3ffff" : color="#e6ffff";
var row = `<tr bgcolor="${color}" id="etrack-tr-${j}" onclick="showBody(this)" name="tr-button">
<td>` + j + `</td>
<td>${myList[i-1].messageId}</td>
<td>${myList[i-1].dateTimeStamp}</td>
<td>${myList[i-1].interfaceName}</td>
</tr>
<tr bgcolor="${color}" id="etrack-tr-${j}-body" name="tr-body" hidden>
<td colspan="4">"${myList[i-1].message}"</td>
</tr>`
table.append(row)
}
for (var i = myList.length + 1; i <= state.rows; i++) {
i % 2 === 0 ? color = "#b3ffff" : color="#e6ffff";
var j = i + (state.page - 1) * 10;
var row = `<tr bgcolor="${color}">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
table.append(row)
}
pageButtons(data.pages)
}
function sortTable() {
var sortBy = document.querySelector('.active').textContent
switch (sortBy) {
case "MessageId":
if (previousSort === "MessageId") {
state.querySet.sort((a, b) => (a.messageId > b.messageId) ? -1 : ((b.messageId > a.messageId) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.messageId > b.messageId) ? 1 : ((b.messageId > a.messageId) ? -1 : 0));
}
break;
case "TimeStamp":
if (previousSort === "TimeStamp") {
state.querySet.sort((a, b) => (a.dateTimeStamp > b.dateTimeStamp) ? -1 : ((b.dateTimeStamp > a.dateTimeStamp) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.dateTimeStamp > b.dateTimeStamp) ? 1 : ((b.dateTimeStamp > a.dateTimeStamp) ? -1 : 0));
}
break;
case "Action":
if (previousSort === "Action") {
state.querySet.sort((a, b) => (a.interfaceName > b.interfaceName) ? -1 : ((b.interfaceName > a.interfaceName) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.interfaceName > b.interfaceName) ? 1 : ((b.interfaceName > a.interfaceName) ? -1 : 0));
}
break;
}
if (previousSort === sortBy) {
previousSort = ""
} else previousSort = sortBy;
}
function prepareTable() {
data = pagination(state.querySet, state.page, state.rows)
myList = data.querySet
}
function buildTable() {
sortTable();
prepareTable();
showTable();
}
function buildPage() {
prepareTable();
showTable();
}

View File

@@ -1,21 +1,47 @@
var state = {
'querySet': [{"clientUUID":"436c4774-038f-4540-9c18-2691ca9b53d4","mockedResponseId":1908998,"mediaType":"application/xml","messageBody":"body","httpHeaders":null,"httpStatus":200}],
'querySet': [{
"clientUUID": "436c4774-038f-4540-9c18-2691ca9b53d4",
"mockedResponseId": 1908998,
"mediaType": "application/xml",
"messageBody": "body",
"httpHeaders": null,
"httpStatus": 200
}],
'page': 1,
'rows': 10,
'window': 5,
}
state.querySet = mockedMessageDtoList;
var myList, data, previousSort;
state.querySet = listForPagination;
buildTable();
for (let i = 3; i >= 0; i--) {
document.querySelector('#btn-sort-' + i).addEventListener('click', function() {
addButtonListeners(i)
})
}
function addButtonListeners(i) {
var buttons = document.querySelectorAll('.btn-sort');
for (var j = buttons.length - 1; j >= 0; j--) {
buttons[j].classList.remove('active');
}
document.querySelector('#btn-sort-' + i).classList.add('active');
buildTable();
}
function pagination(querySet, page, rows) {
var trimStart = (page - 1) * rows
var trimEnd = trimStart + rows
var trimmedData = querySet.slice(trimStart, trimEnd)
var pages = Math.ceil(querySet.length / rows);
if(pages === 0){pages = 1}
return {
'querySet': trimmedData,
'pages': pages,
@@ -44,12 +70,11 @@ function pageButtons(pages) {
}
for (var page = maxLeft; page <= maxRight; page++) {
if(page === state.page){
if (page === state.page) {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info" name="allMessagesClicked">${page}</button>`
}
else{
} else {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info">${page}</button>`
}
}
}
if (state.page != 1) {
@@ -65,20 +90,18 @@ function pageButtons(pages) {
state.page = Number($(this).val())
buildTable()
buildPage()
})
}
function buildTable() {
function showTable() {
var table = $('#table-body')
var data = pagination(state.querySet, state.page, state.rows)
var myList = data.querySet
for(var i = 1; i<=myList.length; i++){
var j = i + (state.page-1) * 10;
if(i%2 === 0){
table.empty();
for (var i = 1; i <= myList.length; i++) {
var j = i + (state.page - 1) * 10;
if (i % 2 === 0) {
var row = `<tr bgcolor="#b3ffff">
<td>` + j + `</td>
<td>${myList[i-1].mockedResponseId}</td>
@@ -95,7 +118,7 @@ function buildTable() {
</button>
</td>
`
}else{
} else {
var row = `<tr bgcolor="#e6ffff">
<td>` + j + `</td>
<td>${myList[i-1].mockedResponseId}</td>
@@ -112,10 +135,76 @@ function buildTable() {
</button>
</td>
`
}
}
table.append(row)
}
for (var i = myList.length + 1; i <= state.rows; i++) {
var j = i + (state.page - 1) * 10;
if (i % 2 === 0) {
var row = `<tr bgcolor="#b3ffff">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
} else {
var row = `<tr bgcolor="#e6ffff">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
}
table.append(row)
}
pageButtons(data.pages)
}
function sortTable() {
var sortBy = document.querySelector('.active').textContent
switch (sortBy) {
case "MessageId":
if (previousSort === "MessageId") {
state.querySet.sort((a, b) => (a.mockedResponseId > b.mockedResponseId) ? -1 : ((b.mockedResponseId > a.mockedResponseId) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.mockedResponseId > b.mockedResponseId) ? 1 : ((b.mockedResponseId > a.mockedResponseId) ? -1 : 0));
}
break;
case "Media Type":
if (previousSort === "Media Type") {
state.querySet.sort((a, b) => (a.mediaType > b.mediaType) ? -1 : ((b.mediaType > a.mediaType) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.mediaType > b.mediaType) ? 1 : ((b.mediaType > a.mediaType) ? -1 : 0));
}
break;
case "Http Status":
if (previousSort === "Http Status") {
state.querySet.sort((a, b) => (a.httpStatus > b.httpStatus) ? -1 : ((b.httpStatus > a.httpStatus) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.httpStatus > b.httpStatus) ? 1 : ((b.httpStatus > a.httpStatus) ? -1 : 0));
}
break;
}
if (previousSort === sortBy) {
previousSort = ""
} else previousSort = sortBy;
myList = state.querySet;
}
function prepareTable() {
data = pagination(state.querySet, state.page, state.rows)
myList = data.querySet
}
function buildTable() {
sortTable();
prepareTable();
showTable();
}
function buildPage(){
prepareTable();
showTable();
}

View File

@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>R11 Klaus</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Lato:100,300,600" rel="stylesheet" type="text/css">
<link href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" rel="stylesheet" type="text/css">
<link href="/css/styles.css" rel="stylesheet" />
</head>
<body>
<hr>
<section class="page-section" id="main-section">
<div class="row">
<div class="column">
<br>To see your activity history use the form below
<form action="#" th:action="@{/etrack/__${clientUUID}__}" th:object="${eventRequestDto}" method="post">
<input type="text" th:name="clientUUID" th:value="${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>
<input type="datetime-local" th:field="*{localDateTimeFrom}"/>
<td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom
Error
</td>
<br><label>Date to:</label><br>
<input type="datetime-local" th:field="*{localDateTimeTo}"/>
<td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo
Error
</td>
<div th:if="${#fields.hasAnyErrors()}">
<p th:each="err : ${#fields.allErrors()}" th:text="${err}">...</p>
</div>
<input type="submit" value="See my history"/>
</form>
</div>
<div class="column">
<br>
<table>
<thead>
<tr>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-0">#</p></th>
<th class="tr-pageable"><p class="btn-sort active" id="btn-sort-1">MessageId</p></th>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-2">TimeStamp</p></th>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-3">Action</p></th>
</tr>
</thead>
<tbody id="table-body">
</tbody>
</table>
<div class="container ">
<div id="pagination-wrapper"></div>
</div>
</div>
</div>
</section>
<hr>
<script type="text/javascript" th:inline="javascript">
var listForPagination = /*[[${eventList}]]*/;
</script>
<script src="/js/etrackPaggination.js"></script>
</body>
</html>

View File

@@ -10,30 +10,31 @@
</head>
<body>
<hr>
<section class="page-section" id="main-section" >
<section class="page-section" id="main-section">
<div class="container">
<div class="row">
<div class="column" >
<div class="column">
<br>In order to set mockup response please fill the form below:
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<table>
<input type="text" th:field="*{clientUUID}" th:placeholder="*{clientUUID}" hidden/>
<table>
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<input type="text" th:field="*{clientUUID}" hidden/>
<tr>
<td>Mocked response id:</td>
<td><input type="text" th:field="*{mockedResponseId}"/></td>
<td><input type="text" th:field="*{mockedResponseId}" placeholder="1"/></td>
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">Id
Error
</td>
</tr>
<tr>
<td>Mocked response body:</td>
<td><textarea rows="4" cols="30" th:field="*{messageBody}"></textarea></td>
<td><textarea rows="4" cols="30" th:field="*{messageBody}"
placeholder="Your message body"></textarea></td>
<td th:if="${#fields.hasErrors('messageBody')}" th:errors="*{messageBody}">Body Error</td>
</tr>
<tr>
<td>Mocked response http code status:</td>
<td><input type="text" th:field="*{httpStatus}"></td>
<td><input type="text" th:field="*{httpStatus}" placeholder="200"></td>
<td th:if="${#fields.hasErrors('httpStatus')}" th:errors="*{httpStatus}">HttpStatus Error
</td>
</tr>
@@ -54,7 +55,7 @@
<td><input type="text" name="value" th:value="${entry.key}" disabled="disabled"/></td>
<td>
<input type="text" name="value" th:field="*{httpHeaders[__${entry.key}__]}"/>
<button type="submit" name="removeHeader" th:value="${entry.key}" >
<button type="submit" name="removeHeader" th:value="${entry.key}">
<img src="/img/icons8-cancel-64.png" style="width: 20px;"/>
</button>
</td>
@@ -68,47 +69,65 @@
</select></td>
</tr>
<tr>
<td><input type="submit" value="Save mocked response"/></td>
<td><input type="submit" value="Save my message"/></td>
<td>
<button type="submit" name="newMessage" th:value="*{clientUUID}">
<img src="/img/update-button.png" style="width: 20px;"/>
</button>
</td>
</tr>
</table>
</form>
</form>
</table>
<table>
<tr>
<td>
<p th:if="${mockSaved}">Mock has been saved</p>
<form action="#" th:action="@{/etrack/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}"
method="get">
<p><input type="submit" value="History"/></p>
</form>
</td>
<td>
<form action="#" th:action="@{/home/getMockedResponse}" th:object="${mockedMessageDto}"
method="get">
<input type="text" th:field="*{clientUUID}" hidden/>
<input type="text" th:field="*{mockedResponseId}" hidden/>
<p th:if="${mockSaved}"><input type="submit" value="Test your mock"/></p>
<p th:if="${canTest}"><input type="submit" value="Test your mock"/></p>
</form>
</td>
</tr>
</table>
<p th:if="${mockSaved}">Mock has been saved</p>
</div>
<div class="column">
<br>
<form th:action="@{/home/__${mockedMessageDto.clientUUID}__}" method="post" id="dupa" >
<table>
<thead>
<tr>
<th class="tr-pageable">#</th>
<th class="tr-pageable">MessageId</th>
<th class="tr-pageable">Media Type</th>
<th class="tr-pageable">Http Status</th>
</tr>
</thead>
<tbody id="table-body">
</tbody>
</table>
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<table>
<thead>
<tr>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-0">#</p>
</th>
<th class="tr-pageable">
<p class="btn-sort active" id="btn-sort-1">MessageId</p>
</th>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-2">Media Type</p>
</th>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-3">Http Status</p>
</th>
</tr>
</thead>
<input type="text" th:field="*{clientUUID}" hidden/>
<tbody id="table-body">
</tbody>
</table>
</form>
<div class="container ">
<div id="pagination-wrapper"></div>
</div>
</div>
</div>
</div>
</div>
@@ -118,45 +137,28 @@
<hr>
<div>
<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
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
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
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/getAll/<a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>
<br>If you are keen to use the mocking service with bigger amount of messages or automate the process by inserting high amount of random messages please consider using the tools below:
<br><a href="http://[[${localhost}]]:8097/swagger-ui.html">http://[[${localhost}]]:8097/swagger-ui.html</a>
<br>
<br>http://[[${localhost}]]:8097/klaus/v1/delete/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}
<br>http://[[${localhost}]]:8097/klaus/v1/set/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}?httpStatus={httpStatus}
<br>http://[[${localhost}]]:8097/klaus/v1/get/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}
<br>http://[[${localhost}]]:8097/klaus/v1/getAll/[[${mockedMessageDto.clientUUID}]]
</div>
<hr>
<div>
<br>To see your activity history use the form below
<form action="#" th:action="@{/eventsForm}" th:object="${eventRequestDto}" method="post">
<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>
<input type="datetime-local" th:field="*{localDateTimeFrom}"/>
<td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom Error</td>
<br><label>Date to:</label><br>
<input type="datetime-local" th:field="*{localDateTimeTo}"/>
<td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo Error</td>
<div th:if="${#fields.hasAnyErrors()}">
<p th:each="err : ${#fields.allErrors()}" th:text="${err}">...</p>
</div>
<input type="submit" value="See my history"/>
</form>
</div>
<hr>
</div>
</div>
<script type="text/javascript" th:inline="javascript">
var mockedMessageDtoList = /*[[${mockedMessageDtoList}]]*/;
var listForPagination = /*[[${mockedMessageDtoList}]]*/;
</script>
<script src="/js/paggination.js"></script>
</body>
</html>

View File

@@ -0,0 +1,128 @@
<!DOCTYPE HTML>
<html lang="pl">
<head>
<title>Blog - Release11 - nowoczesne technologie IT.2</title>
<meta name="description" content="Release<sup>11</sup> jest nowoczesną firma zajmującą się automatyzacją procesów biznesowych związanych z wymianą informacji pomiędzy różnymi systemami i zbudowaną w oparciu o uznawane na całym świecie mechanizmy i wzorce." />
<meta name="generator" content="Quick.Cms.Ext v6.4" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="shortcut icon" href="templates/default/img/favicon.ico" />
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,700&amp;subset=latin-ext" rel="stylesheet">
<link rel="stylesheet" href="templates/default/style.css" />
<link rel="stylesheet" href="templates/default/style-sliders.css" />
<link rel="stylesheet" href="templates/default/style-widgets.css" />
<link rel="stylesheet" type="text/css" href="plugins/slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="plugins/slick/slick-theme.css"/>
<link rel="stylesheet" href="plugins/menu/jquery.sidr.light.min.css" />
<link rel="stylesheet" href="plugins/menu/hamburger.css" />
<link rel="stylesheet" href="plugins/aos/aos2.css" />
<link rel="stylesheet" href="templates/default/responsive.css" />
<script src="plugins/jquery.min.js"></script>
<script src="core/common.js"></script>
<script src="core/libraries/quick.slider.min.js"></script>
<meta property="og:url" content="http://rel.qtf.com.pl/blog.html" /><meta property="og:type" content="article" /><meta property="og:title" content="Blog" /><meta property="og:image" content="http://rel.qtf.com.pl/files/default_open_graph_image.jpg" />
</head>
<body id="page42" class="blog">
<nav id="skiplinks" aria-label="skiplinks">
<ul>
<li><a href="#head2">Przejdź do menu głównego</a></li>
<li><a href="#content">Przejdź do treści</a></li>
</ul>
</nav>
<div id="header">
<header id="head1"> <div class="container">
<h1 id="logo"><a href="./"><img src="templates/default/img/Release11logo_color.svg" alt="Release11"/></a></h1>
<nav class="menu-1" aria-label="menu-1"><ul><li><a href="./#slider-1">Start</a></li><li><a href="./#widget-2">Misja</a></li><li class=" drop-down"><a href="./#widget-1">Oferta</a><ul><li><a href="./#widget-9">Administracja systemami IT</a></li><li><a href="./#widget-10">NoSQL DataBases</a></li><li><a href="./#widget-11">Nowoczesna infrastruktura IT</a></li><li><a href="./#widget-12">Technologia XML</a></li><li><a href="./#widget-13">Usługi</a></li><li><a href="./#widget-14">Integracja systemów IT</a></li></ul></li><li><a href="./#widget-4">Bezpieczeństwo</a></li><li><a href="./#widget-5">Dlaczego My</a></li><li><a href="./blog.html">Blog</a></li><li class="selected"><a href="./tools.html">Narzędzia</a></li><li><a href="./#widget-6">Kontakt</a></li></ul></nav>
<div class="hamburger hamburger--stand" id="hamburger-menu">
<div class="hamburger-box">
<div class="hamburger-inner"></div>
</div>
</div>
</div>
</header>
</div>
<div id="container">
<div id="body">
<div class="container">
<div id="content">
<article id="page">
<h1>Blog</h1><div class="content"><ul class="pages-list pages-4"><li id="page-46"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-4.html"><img src="files/700/planszaban2_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-4.html">Tytuł Artykul 4</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-45"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-3.html"><img src="files/700/plansza1_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-3.html">Tytuł Artykul 3</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-44"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-2.html"><img src="files/700/plansza2_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-2.html">Tytuł Artykul 2</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-43"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-1.html"><img src="files/700/planszatel_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-1.html">Tytuł Artykul 1</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div></ul></article>
</div>
</div>
</div>
<div id="foot"> <footer>
<div class="container">
<div class="copy">&copy; 2020 Release<sup>11</sup> - Wszelkie prawa zastrzeżone. <nav class="menu-2" aria-label="menu-2"><ul><li><a href="./polityka-prywatnosci.html">Polityka prywatności</a></li></ul></nav></div>
<!--
Read the license before you change the footer
www.opensolution.org/licenses.html
-->
<div class="power"><a href="http://opensolution.org/">powered by Quick.Cms</a> | <a href="http://www.grafiqa.pl/">design grafiQa.pl</a></div>
<div id="logoFoot"><a href="./"><img src="templates/default/img/Release11logo_szare.svg" alt="Release11" /></a></div>
</div>
</footer>
</div>
</div>
<script src="plugins/jquery.mobile.events-touch.min.js"></script>
<script src="core/libraries/quick.box.min.js"></script>
<script type="text/javascript" src="plugins/slick/slick.min.js"></script>
<script type="text/javascript">
$(function() {
$('#page-14 h2, #page-14 .description').click(function(e) {
//jeżeli popup nie jest widoczny to go pokaż
if (!$('.popup:visible').length) {
$('.popup').fadeIn();
}
e.preventDefault();
return false;
});
//zdarzenie zamknięcia podpinamy pod przycisk close i pod tło popupa
$('.popup .close, .popup .bg, .contact-panel.send .bg, .contact-panel.send .close').click(function() {
$(this).parents('.popup, .contact-panel.send').fadeOut();
});
});
</script>
<script src="plugins/menu/jquery.sidr.min.js"></script>
<script>
$(document).ready(function() {
$('#hamburger-menu').sidr({
name: 'sidr-main',
side: 'right',
source: '.menu-1',
onOpen:function() {
$('#hamburger-menu').toggleClass('is-active');
$('#header').addClass('open_menu');
},
onClose:function() {
$('#hamburger-menu').toggleClass('is-active');
$('#header').removeClass('open_menu');
}
});
});
$( window ).resize(function () {
$.sidr('close', 'sidr');
});
</script>
<script src="plugins/aos/aos.js"></script>
<script>
AOS.init();
</script>
</body>
</html>

View File

@@ -2,16 +2,10 @@ package com.release11.klaus.repository;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.release11.klaus.model.Event;
import com.release11.klaus.model.MockedMessageDto;
import com.release11.klaus.utilis.BusinessKey;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.*;
@SpringBootTest
class MockedResponseRedisRepositoryTest {
@Autowired
@@ -20,42 +14,12 @@ class MockedResponseRedisRepositoryTest {
@Test
void getMockedResponse() throws JsonProcessingException {
Map<BusinessKey, String> businessKeys = new HashMap<>();
String[] businessKeys1 = {"fdsa", "Dsa", "dsa"};
businessKeys.put(BusinessKey.CLIENT_UUID, "xxx");
businessKeys.put(BusinessKey.INTERFACE_NAME, "interfaceName");
businessKeys.put(BusinessKey.MESSAGE_ID, "2323");
Event event = Event.builder()
.dateTimeStamp(LocalDateTime.now())
.businessKeys(businessKeys1)
.message("hello")
.level("INFO")
.thread("main")
.build();
String eventString = objectMapper.writeValueAsString(event);
String ddd = "{\"dateTimeStamp\" : \"2020-09-04T15:31:48\", \"businessKeys\":[\"INTERFACE_NAME:setMockedResponse\", \"CLIENT_UUID:436c4774-038f-4540-9c18-2691ca9b53d4\", \"MESSAGE_ID:1\"],\"thread\":\"http-nio-8097-exec-6\",\"level\":\"INFO \", \"message\":\"mockedMessage(compositePrimaryKey=null, clientUUID=436c4774-038f-4540-9c18-2691ca9b53d4, mockedResponseId=1, mediaType=application/xml, messageBody=body, httpHeaders=null, httpStatus=200)\" dsads}das";
objectMapper.readValue(eventString, Event.class);
}
@Test
void setMockedResponse() throws JsonProcessingException {
List<MockedMessageDto> mockedMessageDtoList = new LinkedList<>();
mockedMessageDtoList.add(new MockedMessageDto(UUID.randomUUID(), 1,
"application/xml", "body", new LinkedHashMap<>(), 200));
mockedMessageDtoList.add(new MockedMessageDto(UUID.randomUUID(), 1,
"application/xml", "body", new LinkedHashMap<>(), 200));
mockedMessageDtoList.add(new MockedMessageDto(UUID.randomUUID(), 1,
"application/xml", "body", new LinkedHashMap<>(), 200));
mockedMessageDtoList.add(new MockedMessageDto(UUID.randomUUID(), 1,
"application/xml", "body", new LinkedHashMap<>(), 200));
List<String> mockedMessageDtoList1 = new LinkedList<>();
for (MockedMessageDto mockedMessageDto : mockedMessageDtoList){
mockedMessageDtoList1.add(objectMapper.writeValueAsString(mockedMessageDto));
}
mockedMessageDtoList1.forEach(System.out::println);
}

View File

@@ -3,13 +3,14 @@
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!--https://github.com/kmtong/logback-redis-appender-->
<appender name="LOGSTASH" class="com.release11.klaus.utilis.RedisAppender">
<host>redis-server</host>
<host>localhost
</host>
<port>6379</port>
<key>logstash</key>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html-->
<Pattern>
{"dateTimeStamp" : "%d{yyyy-MM-dd}T%d{HH:mm:ss}", "businessKeys":["INTERFACE_NAME:%X{INTERFACE_NAME}", "CLIENT_UUID:%X{CLIENT_UUID}", "MESSAGE_ID:%X{MESSAGE_ID}"],"thread":"%t","level":"%-5level", "message":"%msg"}%n
{"dateTimeStamp" : "%d{yyyy-MM-dd}T%d{HH:mm:ss}", "eventId":"%X{eventId}", "interfaceName":"%X{interfaceName}", "clientUUID":"%X{clientUUID}", "messageId":"%X{messageId}", "thread":"%t","level":"%-5level", "message":"%msg"}%n
</Pattern>
</layout>
</appender>

View File

@@ -46,6 +46,10 @@ button:focus {
}
tr[name="tr-button"]:hover{
background-color: #ddd;
cursor: pointer;
}
#pagination-wrapper button {
background: none;
@@ -80,3 +84,28 @@ button[name="removeHeader"] {
transition: background-color 0.3s, color 0.3s;
}
.btn-sort {
border: 0;
padding: 0 20px;
text-align: center;
color: #fff;
text-shadow: 1px 1px 1px #000;
border-radius: 10px;
background-color: rgb(0, 102, 255);
background-image: linear-gradient(to top left,
rgba(0, 0, 0, .2),
rgba(0, 0, 0, .2) 30%,
rgba(0, 0, 0, 0));
}
.btn-sort:hover {
background-color: rgb(153, 194, 255);
cursor: pointer;
}
.active {
background-color: rgb(153, 194, 255);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,178 @@
var state = {
'querySet': [{
"clientUUID": "436c4774-038f-4540-9c18-2691ca9b53d4",
"mockedResponseId": 1908998,
"mediaType": "application/xml",
"messageBody": "body",
"httpHeaders": null,
"httpStatus": 200
}],
'page': 1,
'rows': 10,
'window': 5,
}
var myList, data, previousSort;
state.querySet = listForPagination;
buildTable();
for (let i = 3; i >= 0; i--) {
document.querySelector('#btn-sort-' + i).addEventListener('click', function() {
addButtonListeners(i)
})
}
function addButtonListeners(i) {
var buttons = document.querySelectorAll('.btn-sort');
for (var j = buttons.length - 1; j >= 0; j--) {
buttons[j].classList.remove('active');
}
document.querySelector('#btn-sort-' + i).classList.add('active');
buildTable();
}
function pagination(querySet, page, rows) {
var trimStart = (page - 1) * rows
var trimEnd = trimStart + rows
var trimmedData = querySet.slice(trimStart, trimEnd)
var pages = Math.ceil(querySet.length / rows);
if (pages === 0) {
pages = 1
}
return {
'querySet': trimmedData,
'pages': pages,
}
}
function pageButtons(pages) {
var wrapper = document.getElementById('pagination-wrapper');
wrapper.innerHTML = ``;
var maxLeft = (state.page - Math.floor(state.window / 2))
var maxRight = (state.page + Math.ceil(state.window / 2))
if (maxLeft < 1) {
maxLeft = 1
maxRight = state.window
}
if (maxRight > pages) {
maxLeft = pages - (state.window - 1)
if (maxLeft < 1) {
maxLeft = 1
}
maxRight = pages
}
for (var page = maxLeft; page <= maxRight; page++) {
if (page === state.page) {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info" name="allMessagesClicked">${page}</button>`
} else {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info">${page}</button>`
}
}
if (state.page != 1) {
wrapper.innerHTML = `<button value=${1} class="page btn btn-sm btn-info">&#171; First</button>` + wrapper.innerHTML
}
if (state.page != pages) {
wrapper.innerHTML += `<button value=${pages} class="page btn btn-sm btn-info">Last &#187;</button>`
}
$('.page').on('click', function() {
$('#table-body').empty()
state.page = Number($(this).val())
buildPage()
})
}
function showBody(elt){
$("#" + elt.id + "-body").toggle();
}
function showTable() {
var table = $('#table-body')
table.empty();
var color;
for (var i = 1; i <= myList.length; i++) {
var j = i + (state.page - 1) * 10;
i % 2 === 0 ? color = "#b3ffff" : color="#e6ffff";
var row = `<tr bgcolor="${color}" id="etrack-tr-${j}" onclick="showBody(this)" name="tr-button">
<td>` + j + `</td>
<td>${myList[i-1].messageId}</td>
<td>${myList[i-1].dateTimeStamp}</td>
<td>${myList[i-1].interfaceName}</td>
</tr>
<tr bgcolor="${color}" id="etrack-tr-${j}-body" name="tr-body" hidden>
<td colspan="4">"${myList[i-1].message}"</td>
</tr>`
table.append(row)
}
for (var i = myList.length + 1; i <= state.rows; i++) {
i % 2 === 0 ? color = "#b3ffff" : color="#e6ffff";
var j = i + (state.page - 1) * 10;
var row = `<tr bgcolor="${color}">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
table.append(row)
}
pageButtons(data.pages)
}
function sortTable() {
var sortBy = document.querySelector('.active').textContent
switch (sortBy) {
case "MessageId":
if (previousSort === "MessageId") {
state.querySet.sort((a, b) => (a.messageId > b.messageId) ? -1 : ((b.messageId > a.messageId) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.messageId > b.messageId) ? 1 : ((b.messageId > a.messageId) ? -1 : 0));
}
break;
case "TimeStamp":
if (previousSort === "TimeStamp") {
state.querySet.sort((a, b) => (a.dateTimeStamp > b.dateTimeStamp) ? -1 : ((b.dateTimeStamp > a.dateTimeStamp) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.dateTimeStamp > b.dateTimeStamp) ? 1 : ((b.dateTimeStamp > a.dateTimeStamp) ? -1 : 0));
}
break;
case "Action":
if (previousSort === "Action") {
state.querySet.sort((a, b) => (a.interfaceName > b.interfaceName) ? -1 : ((b.interfaceName > a.interfaceName) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.interfaceName > b.interfaceName) ? 1 : ((b.interfaceName > a.interfaceName) ? -1 : 0));
}
break;
}
if (previousSort === sortBy) {
previousSort = ""
} else previousSort = sortBy;
}
function prepareTable() {
data = pagination(state.querySet, state.page, state.rows)
myList = data.querySet
}
function buildTable() {
sortTable();
prepareTable();
showTable();
}
function buildPage() {
prepareTable();
showTable();
}

View File

@@ -1,21 +1,47 @@
var state = {
'querySet': [{"clientUUID":"436c4774-038f-4540-9c18-2691ca9b53d4","mockedResponseId":1908998,"mediaType":"application/xml","messageBody":"body","httpHeaders":null,"httpStatus":200}],
'querySet': [{
"clientUUID": "436c4774-038f-4540-9c18-2691ca9b53d4",
"mockedResponseId": 1908998,
"mediaType": "application/xml",
"messageBody": "body",
"httpHeaders": null,
"httpStatus": 200
}],
'page': 1,
'rows': 10,
'window': 5,
}
state.querySet = mockedMessageDtoList;
var myList, data, previousSort;
state.querySet = listForPagination;
buildTable();
for (let i = 3; i >= 0; i--) {
document.querySelector('#btn-sort-' + i).addEventListener('click', function() {
addButtonListeners(i)
})
}
function addButtonListeners(i) {
var buttons = document.querySelectorAll('.btn-sort');
for (var j = buttons.length - 1; j >= 0; j--) {
buttons[j].classList.remove('active');
}
document.querySelector('#btn-sort-' + i).classList.add('active');
buildTable();
}
function pagination(querySet, page, rows) {
var trimStart = (page - 1) * rows
var trimEnd = trimStart + rows
var trimmedData = querySet.slice(trimStart, trimEnd)
var pages = Math.ceil(querySet.length / rows);
if(pages === 0){pages = 1}
return {
'querySet': trimmedData,
'pages': pages,
@@ -44,12 +70,11 @@ function pageButtons(pages) {
}
for (var page = maxLeft; page <= maxRight; page++) {
if(page === state.page){
if (page === state.page) {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info" name="allMessagesClicked">${page}</button>`
}
else{
} else {
wrapper.innerHTML += `<button value=${page} class="page btn btn-sm btn-info">${page}</button>`
}
}
}
if (state.page != 1) {
@@ -65,20 +90,18 @@ function pageButtons(pages) {
state.page = Number($(this).val())
buildTable()
buildPage()
})
}
function buildTable() {
function showTable() {
var table = $('#table-body')
var data = pagination(state.querySet, state.page, state.rows)
var myList = data.querySet
for(var i = 1; i<=myList.length; i++){
var j = i + (state.page-1) * 10;
if(i%2 === 0){
table.empty();
for (var i = 1; i <= myList.length; i++) {
var j = i + (state.page - 1) * 10;
if (i % 2 === 0) {
var row = `<tr bgcolor="#b3ffff">
<td>` + j + `</td>
<td>${myList[i-1].mockedResponseId}</td>
@@ -95,7 +118,7 @@ function buildTable() {
</button>
</td>
`
}else{
} else {
var row = `<tr bgcolor="#e6ffff">
<td>` + j + `</td>
<td>${myList[i-1].mockedResponseId}</td>
@@ -112,10 +135,76 @@ function buildTable() {
</button>
</td>
`
}
}
table.append(row)
}
for (var i = myList.length + 1; i <= state.rows; i++) {
var j = i + (state.page - 1) * 10;
if (i % 2 === 0) {
var row = `<tr bgcolor="#b3ffff">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
} else {
var row = `<tr bgcolor="#e6ffff">
<td>` + j + `</td>
<td></td>
<td></td>
<td></td>
`
}
table.append(row)
}
pageButtons(data.pages)
}
function sortTable() {
var sortBy = document.querySelector('.active').textContent
switch (sortBy) {
case "MessageId":
if (previousSort === "MessageId") {
state.querySet.sort((a, b) => (a.mockedResponseId > b.mockedResponseId) ? -1 : ((b.mockedResponseId > a.mockedResponseId) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.mockedResponseId > b.mockedResponseId) ? 1 : ((b.mockedResponseId > a.mockedResponseId) ? -1 : 0));
}
break;
case "Media Type":
if (previousSort === "Media Type") {
state.querySet.sort((a, b) => (a.mediaType > b.mediaType) ? -1 : ((b.mediaType > a.mediaType) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.mediaType > b.mediaType) ? 1 : ((b.mediaType > a.mediaType) ? -1 : 0));
}
break;
case "Http Status":
if (previousSort === "Http Status") {
state.querySet.sort((a, b) => (a.httpStatus > b.httpStatus) ? -1 : ((b.httpStatus > a.httpStatus) ? 1 : 0));
} else {
state.querySet.sort((a, b) => (a.httpStatus > b.httpStatus) ? 1 : ((b.httpStatus > a.httpStatus) ? -1 : 0));
}
break;
}
if (previousSort === sortBy) {
previousSort = ""
} else previousSort = sortBy;
myList = state.querySet;
}
function prepareTable() {
data = pagination(state.querySet, state.page, state.rows)
myList = data.querySet
}
function buildTable() {
sortTable();
prepareTable();
showTable();
}
function buildPage(){
prepareTable();
showTable();
}

View File

@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>R11 Klaus</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Lato:100,300,600" rel="stylesheet" type="text/css">
<link href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css" rel="stylesheet" type="text/css">
<link href="/css/styles.css" rel="stylesheet" />
</head>
<body>
<hr>
<section class="page-section" id="main-section">
<div class="row">
<div class="column">
<br>To see your activity history use the form below
<form action="#" th:action="@{/etrack/__${clientUUID}__}" th:object="${eventRequestDto}" method="post">
<input type="text" th:name="clientUUID" th:value="${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>
<input type="datetime-local" th:field="*{localDateTimeFrom}"/>
<td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom
Error
</td>
<br><label>Date to:</label><br>
<input type="datetime-local" th:field="*{localDateTimeTo}"/>
<td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo
Error
</td>
<div th:if="${#fields.hasAnyErrors()}">
<p th:each="err : ${#fields.allErrors()}" th:text="${err}">...</p>
</div>
<input type="submit" value="See my history"/>
</form>
</div>
<div class="column">
<br>
<table>
<thead>
<tr>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-0">#</p></th>
<th class="tr-pageable"><p class="btn-sort active" id="btn-sort-1">MessageId</p></th>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-2">TimeStamp</p></th>
<th class="tr-pageable"><p class="btn-sort" id="btn-sort-3">Action</p></th>
</tr>
</thead>
<tbody id="table-body">
</tbody>
</table>
<div class="container ">
<div id="pagination-wrapper"></div>
</div>
</div>
</div>
</section>
<hr>
<script type="text/javascript" th:inline="javascript">
var listForPagination = /*[[${eventList}]]*/;
</script>
<script src="/js/etrackPaggination.js"></script>
</body>
</html>

View File

@@ -10,30 +10,31 @@
</head>
<body>
<hr>
<section class="page-section" id="main-section" >
<section class="page-section" id="main-section">
<div class="container">
<div class="row">
<div class="column" >
<div class="column">
<br>In order to set mockup response please fill the form below:
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<table>
<input type="text" th:field="*{clientUUID}" th:placeholder="*{clientUUID}" hidden/>
<table>
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<input type="text" th:field="*{clientUUID}" hidden/>
<tr>
<td>Mocked response id:</td>
<td><input type="text" th:field="*{mockedResponseId}"/></td>
<td><input type="text" th:field="*{mockedResponseId}" placeholder="1"/></td>
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">Id
Error
</td>
</tr>
<tr>
<td>Mocked response body:</td>
<td><textarea rows="4" cols="30" th:field="*{messageBody}"></textarea></td>
<td><textarea rows="4" cols="30" th:field="*{messageBody}"
placeholder="Your message body"></textarea></td>
<td th:if="${#fields.hasErrors('messageBody')}" th:errors="*{messageBody}">Body Error</td>
</tr>
<tr>
<td>Mocked response http code status:</td>
<td><input type="text" th:field="*{httpStatus}"></td>
<td><input type="text" th:field="*{httpStatus}" placeholder="200"></td>
<td th:if="${#fields.hasErrors('httpStatus')}" th:errors="*{httpStatus}">HttpStatus Error
</td>
</tr>
@@ -54,7 +55,7 @@
<td><input type="text" name="value" th:value="${entry.key}" disabled="disabled"/></td>
<td>
<input type="text" name="value" th:field="*{httpHeaders[__${entry.key}__]}"/>
<button type="submit" name="removeHeader" th:value="${entry.key}" >
<button type="submit" name="removeHeader" th:value="${entry.key}">
<img src="/img/icons8-cancel-64.png" style="width: 20px;"/>
</button>
</td>
@@ -68,47 +69,65 @@
</select></td>
</tr>
<tr>
<td><input type="submit" value="Save mocked response"/></td>
<td><input type="submit" value="Save my message"/></td>
<td>
<button type="submit" name="newMessage" th:value="*{clientUUID}">
<img src="/img/update-button.png" style="width: 20px;"/>
</button>
</td>
</tr>
</table>
</form>
</form>
</table>
<table>
<tr>
<td>
<p th:if="${mockSaved}">Mock has been saved</p>
<form action="#" th:action="@{/etrack/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}"
method="get">
<p><input type="submit" value="History"/></p>
</form>
</td>
<td>
<form action="#" th:action="@{/home/getMockedResponse}" th:object="${mockedMessageDto}"
method="get">
<input type="text" th:field="*{clientUUID}" hidden/>
<input type="text" th:field="*{mockedResponseId}" hidden/>
<p th:if="${mockSaved}"><input type="submit" value="Test your mock"/></p>
<p th:if="${canTest}"><input type="submit" value="Test your mock"/></p>
</form>
</td>
</tr>
</table>
<p th:if="${mockSaved}">Mock has been saved</p>
</div>
<div class="column">
<br>
<form th:action="@{/home/__${mockedMessageDto.clientUUID}__}" method="post" id="dupa" >
<table>
<thead>
<tr>
<th class="tr-pageable">#</th>
<th class="tr-pageable">MessageId</th>
<th class="tr-pageable">Media Type</th>
<th class="tr-pageable">Http Status</th>
</tr>
</thead>
<tbody id="table-body">
</tbody>
</table>
<form action="#" th:action="@{/home/__${mockedMessageDto.clientUUID}__}"
th:object="${mockedMessageDto}" method="post">
<table>
<thead>
<tr>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-0">#</p>
</th>
<th class="tr-pageable">
<p class="btn-sort active" id="btn-sort-1">MessageId</p>
</th>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-2">Media Type</p>
</th>
<th class="tr-pageable">
<p class="btn-sort" id="btn-sort-3">Http Status</p>
</th>
</tr>
</thead>
<input type="text" th:field="*{clientUUID}" hidden/>
<tbody id="table-body">
</tbody>
</table>
</form>
<div class="container ">
<div id="pagination-wrapper"></div>
</div>
</div>
</div>
</div>
</div>
@@ -118,45 +137,28 @@
<hr>
<div>
<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
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
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
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}
<br>http://<a th:text="@{__${localhost}__}">localhost</a>:8097/klaus/v1/getAll/<a
th:text="${mockedMessageDto.clientUUID}">clientUUID should be here</a>
<br>If you are keen to use the mocking service with bigger amount of messages or automate the process by inserting high amount of random messages please consider using the tools below:
<br><a href="http://[[${localhost}]]:8097/swagger-ui.html">http://[[${localhost}]]:8097/swagger-ui.html</a>
<br>
<br>http://[[${localhost}]]:8097/klaus/v1/delete/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}
<br>http://[[${localhost}]]:8097/klaus/v1/set/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}?httpStatus={httpStatus}
<br>http://[[${localhost}]]:8097/klaus/v1/get/[[${mockedMessageDto.clientUUID}]]/{mockedResponseId}
<br>http://[[${localhost}]]:8097/klaus/v1/getAll/[[${mockedMessageDto.clientUUID}]]
</div>
<hr>
<div>
<br>To see your activity history use the form below
<form action="#" th:action="@{/eventsForm}" th:object="${eventRequestDto}" method="post">
<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>
<input type="datetime-local" th:field="*{localDateTimeFrom}"/>
<td th:if="${#fields.hasErrors('localDateTimeFrom')}" th:errors="*{localDateTimeFrom}">localDateTimeFrom Error</td>
<br><label>Date to:</label><br>
<input type="datetime-local" th:field="*{localDateTimeTo}"/>
<td th:if="${#fields.hasErrors('localDateTimeTo')}" th:errors="*{localDateTimeTo}">localDateTimeTo Error</td>
<div th:if="${#fields.hasAnyErrors()}">
<p th:each="err : ${#fields.allErrors()}" th:text="${err}">...</p>
</div>
<input type="submit" value="See my history"/>
</form>
</div>
<hr>
</div>
</div>
<script type="text/javascript" th:inline="javascript">
var mockedMessageDtoList = /*[[${mockedMessageDtoList}]]*/;
var listForPagination = /*[[${mockedMessageDtoList}]]*/;
</script>
<script src="/js/paggination.js"></script>
</body>
</html>

View File

@@ -0,0 +1,128 @@
<!DOCTYPE HTML>
<html lang="pl">
<head>
<title>Blog - Release11 - nowoczesne technologie IT.2</title>
<meta name="description" content="Release<sup>11</sup> jest nowoczesną firma zajmującą się automatyzacją procesów biznesowych związanych z wymianą informacji pomiędzy różnymi systemami i zbudowaną w oparciu o uznawane na całym świecie mechanizmy i wzorce." />
<meta name="generator" content="Quick.Cms.Ext v6.4" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="shortcut icon" href="templates/default/img/favicon.ico" />
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,700&amp;subset=latin-ext" rel="stylesheet">
<link rel="stylesheet" href="templates/default/style.css" />
<link rel="stylesheet" href="templates/default/style-sliders.css" />
<link rel="stylesheet" href="templates/default/style-widgets.css" />
<link rel="stylesheet" type="text/css" href="plugins/slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="plugins/slick/slick-theme.css"/>
<link rel="stylesheet" href="plugins/menu/jquery.sidr.light.min.css" />
<link rel="stylesheet" href="plugins/menu/hamburger.css" />
<link rel="stylesheet" href="plugins/aos/aos2.css" />
<link rel="stylesheet" href="templates/default/responsive.css" />
<script src="plugins/jquery.min.js"></script>
<script src="core/common.js"></script>
<script src="core/libraries/quick.slider.min.js"></script>
<meta property="og:url" content="http://rel.qtf.com.pl/blog.html" /><meta property="og:type" content="article" /><meta property="og:title" content="Blog" /><meta property="og:image" content="http://rel.qtf.com.pl/files/default_open_graph_image.jpg" />
</head>
<body id="page42" class="blog">
<nav id="skiplinks" aria-label="skiplinks">
<ul>
<li><a href="#head2">Przejdź do menu głównego</a></li>
<li><a href="#content">Przejdź do treści</a></li>
</ul>
</nav>
<div id="header">
<header id="head1"> <div class="container">
<h1 id="logo"><a href="./"><img src="templates/default/img/Release11logo_color.svg" alt="Release11"/></a></h1>
<nav class="menu-1" aria-label="menu-1"><ul><li><a href="./#slider-1">Start</a></li><li><a href="./#widget-2">Misja</a></li><li class=" drop-down"><a href="./#widget-1">Oferta</a><ul><li><a href="./#widget-9">Administracja systemami IT</a></li><li><a href="./#widget-10">NoSQL DataBases</a></li><li><a href="./#widget-11">Nowoczesna infrastruktura IT</a></li><li><a href="./#widget-12">Technologia XML</a></li><li><a href="./#widget-13">Usługi</a></li><li><a href="./#widget-14">Integracja systemów IT</a></li></ul></li><li><a href="./#widget-4">Bezpieczeństwo</a></li><li><a href="./#widget-5">Dlaczego My</a></li><li><a href="./blog.html">Blog</a></li><li class="selected"><a href="./tools.html">Narzędzia</a></li><li><a href="./#widget-6">Kontakt</a></li></ul></nav>
<div class="hamburger hamburger--stand" id="hamburger-menu">
<div class="hamburger-box">
<div class="hamburger-inner"></div>
</div>
</div>
</div>
</header>
</div>
<div id="container">
<div id="body">
<div class="container">
<div id="content">
<article id="page">
<h1>Blog</h1><div class="content"><ul class="pages-list pages-4"><li id="page-46"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-4.html"><img src="files/700/planszaban2_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-4.html">Tytuł Artykul 4</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-45"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-3.html"><img src="files/700/plansza1_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-3.html">Tytuł Artykul 3</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-44"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-2.html"><img src="files/700/plansza2_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-2.html">Tytuł Artykul 2</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div><li id="page-43"><div class="image" data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-1.html"><img src="files/700/planszatel_16x9.jpg" alt="" /></a></div><h2 data-aos="zoom-in" data-aos-offset="0"><a href="tytul-artykul-1.html">Tytuł Artykul 1</a></h2><time>24.08.2020</time><div class="description" data-aos="zoom-in" data-aos-offset="0"><p>Tekst 100 znaków</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque</p></div></ul></article>
</div>
</div>
</div>
<div id="foot"> <footer>
<div class="container">
<div class="copy">&copy; 2020 Release<sup>11</sup> - Wszelkie prawa zastrzeżone. <nav class="menu-2" aria-label="menu-2"><ul><li><a href="./polityka-prywatnosci.html">Polityka prywatności</a></li></ul></nav></div>
<!--
Read the license before you change the footer
www.opensolution.org/licenses.html
-->
<div class="power"><a href="http://opensolution.org/">powered by Quick.Cms</a> | <a href="http://www.grafiqa.pl/">design grafiQa.pl</a></div>
<div id="logoFoot"><a href="./"><img src="templates/default/img/Release11logo_szare.svg" alt="Release11" /></a></div>
</div>
</footer>
</div>
</div>
<script src="plugins/jquery.mobile.events-touch.min.js"></script>
<script src="core/libraries/quick.box.min.js"></script>
<script type="text/javascript" src="plugins/slick/slick.min.js"></script>
<script type="text/javascript">
$(function() {
$('#page-14 h2, #page-14 .description').click(function(e) {
//jeżeli popup nie jest widoczny to go pokaż
if (!$('.popup:visible').length) {
$('.popup').fadeIn();
}
e.preventDefault();
return false;
});
//zdarzenie zamknięcia podpinamy pod przycisk close i pod tło popupa
$('.popup .close, .popup .bg, .contact-panel.send .bg, .contact-panel.send .close').click(function() {
$(this).parents('.popup, .contact-panel.send').fadeOut();
});
});
</script>
<script src="plugins/menu/jquery.sidr.min.js"></script>
<script>
$(document).ready(function() {
$('#hamburger-menu').sidr({
name: 'sidr-main',
side: 'right',
source: '.menu-1',
onOpen:function() {
$('#hamburger-menu').toggleClass('is-active');
$('#header').addClass('open_menu');
},
onClose:function() {
$('#hamburger-menu').toggleClass('is-active');
$('#header').removeClass('open_menu');
}
});
});
$( window ).resize(function () {
$.sidr('close', 'sidr');
});
</script>
<script src="plugins/aos/aos.js"></script>
<script>
AOS.init();
</script>
</body>
</html>

View File

@@ -10,7 +10,7 @@ import org.springframework.stereotype.Component;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2020-09-11T10:05:20+0200",
date = "2020-09-21T16:25:27+0200",
comments = "version: 1.3.1.Final, compiler: javac, environment: Java 14.0.1 (Oracle Corporation)"
)
@Component