Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JSON Server and Client example application #162

Merged
merged 4 commits into from
Nov 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Example Applications of JSON Server and a JSON Client
1 change: 0 additions & 1 deletion ocpp-v1_6-example/.gitignore

This file was deleted.

37 changes: 37 additions & 0 deletions ocpp-v1_6-example/json-client-implementation/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

mvnw
mvnw.cmd
.mvn/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
81 changes: 81 additions & 0 deletions ocpp-v1_6-example/json-client-implementation/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>eu.chargetime.ocpp</groupId>
<artifactId>json-client-implementation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>json-client-implementation</name>
<description>Demo project for a json client application, written in form of tests</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>eu.chargetime.ocpp</groupId>
<artifactId>v1_6</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package eu.chargetime.ocpp.jsonclientimplementation;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JsonClientImplementationApplication {

public static void main(String[] args) {
SpringApplication.run(JsonClientImplementationApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package eu.chargetime.ocpp.jsonclientimplementation.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties
@Getter
@Setter
public class ApiConfigurations {

@Value("${websocket.url}")
private String webSocketBaseUrl;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
websocket:
url: "${WEB_SOCKET_URL:localhost:8080}"
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package eu.chargetime.ocpp.jsonclientimplementation;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class JsonClientImplementationApplicationTests {

@Test
void contextLoads() {
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package eu.chargetime.ocpp.jsonclientimplementation.ocpphandler;

import eu.chargetime.ocpp.feature.profile.ClientCoreEventHandler;
import eu.chargetime.ocpp.model.core.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;

@TestConfiguration
@Slf4j
public class ClientCoreEventHandlerConfig {

@Bean
public ClientCoreEventHandler configTestClient() {
return new ClientCoreEventHandler() {
@Override
public ChangeAvailabilityConfirmation handleChangeAvailabilityRequest(ChangeAvailabilityRequest request) {

System.out.println(request);
// ... handle event

return new ChangeAvailabilityConfirmation(AvailabilityStatus.Accepted);
}

@Override
public GetConfigurationConfirmation handleGetConfigurationRequest(GetConfigurationRequest request) {

System.out.println(request);
// ... handle event

return null; // returning null means unsupported feature
}

@Override
public ChangeConfigurationConfirmation handleChangeConfigurationRequest(ChangeConfigurationRequest request) {

System.out.println(request);
// ... handle event

return null; // returning null means unsupported feature
}

@Override
public ClearCacheConfirmation handleClearCacheRequest(ClearCacheRequest request) {

System.out.println(request);
// ... handle event

return null; // returning null means unsupported feature
}

@Override
public DataTransferConfirmation handleDataTransferRequest(DataTransferRequest request) {

System.out.println(request);
// ... handle event

return null; // returning null means unsupported feature
}

@Override
public RemoteStartTransactionConfirmation handleRemoteStartTransactionRequest(RemoteStartTransactionRequest request) {

System.out.println(request);
// ... handle event

return null; // returning null means unsupported feature
}

@Override
public RemoteStopTransactionConfirmation handleRemoteStopTransactionRequest(RemoteStopTransactionRequest request) {

System.out.println(request);
// ... handle event

return null; // returning null means unsupported feature
}

@Override
public ResetConfirmation handleResetRequest(ResetRequest request) {

System.out.println(request);
// ... handle event

return null; // returning null means unsupported feature
}

@Override
public UnlockConnectorConfirmation handleUnlockConnectorRequest(UnlockConnectorRequest request) {

System.out.println(request);
// ... handle event

return null; // returning null means unsupported feature
}
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package eu.chargetime.ocpp.jsonclientimplementation.ocpphandler;

import eu.chargetime.ocpp.feature.profile.ClientCoreEventHandler;
import eu.chargetime.ocpp.feature.profile.ClientCoreProfile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;

@TestConfiguration
@Slf4j
public class ClientCoreProfileConfig {

@Bean
public ClientCoreProfile configureClientCoreProfile(ClientCoreEventHandler clientCoreEventHandler) {
return new ClientCoreProfile(clientCoreEventHandler);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package eu.chargetime.ocpp.jsonclientimplementation.ocpphandler;

import eu.chargetime.ocpp.JSONClient;
import eu.chargetime.ocpp.feature.profile.ClientCoreProfile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;

@TestConfiguration
@Slf4j
public class JsonClientConfig {

@Bean
public JSONClient configureJsonClient(ClientCoreProfile core) {
return new JSONClient(core);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package eu.chargetime.ocpp.jsonclientimplementation.ocpphandler;

import eu.chargetime.ocpp.JSONClient;
import eu.chargetime.ocpp.OccurenceConstraintException;
import eu.chargetime.ocpp.UnsupportedFeatureException;
import eu.chargetime.ocpp.feature.profile.ClientCoreProfile;
import eu.chargetime.ocpp.jsonclientimplementation.config.ApiConfigurations;
import eu.chargetime.ocpp.model.core.AuthorizationStatus;
import eu.chargetime.ocpp.model.core.AuthorizeConfirmation;
import eu.chargetime.ocpp.model.core.AuthorizeRequest;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.concurrent.ExecutionException;

import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;

@RunWith(SpringRunner.class)
@Slf4j
@SpringBootTest
@Import({JsonClientConfig.class, ClientCoreProfileConfig.class, ClientCoreEventHandlerConfig.class,
ApiConfigurations.class})
public class OCPPHandlerTest {

@Autowired
private JSONClient jsonClient;

@Autowired
private ClientCoreProfile clientCoreProfile;

@Autowired
private ApiConfigurations apiConfigurations;

@Test
public void testOCPPAuthorizeHandler() {
String url = "ws://" + apiConfigurations.getWebSocketBaseUrl();
AuthorizeRequest testRequest = clientCoreProfile.createAuthorizeRequest("testId");
jsonClient.connect(url, null);
try {
AuthorizeConfirmation authorizeConfirmation = (AuthorizeConfirmation) jsonClient.send(testRequest)
.toCompletableFuture().get();
assertTrue(true);
assertEquals(AuthorizationStatus.Accepted,authorizeConfirmation.getIdTagInfo().getStatus());
} catch (OccurenceConstraintException | UnsupportedFeatureException
| ExecutionException | InterruptedException e) {
log.error("Exception occurred: " + e);
log.error("Test will fail");
assertTrue(false);
}
}
}
Loading