Skip to content
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
17 changes: 16 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,21 @@
<artifactId>annotations</artifactId>
<version>26.0.2</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.27.3</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.19.0</version>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down Expand Up @@ -184,7 +199,7 @@
<version>[17,)</version>
</requireJavaVersion>
<requireMavenVersion>
<version>[3.3.9,)</version>
<version>[3.9.0,)</version>
</requireMavenVersion>
</rules>
</configuration>
Expand Down
31 changes: 31 additions & 0 deletions steve-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,36 @@
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.10</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,10 @@
package de.rwth.idsg.steve.web.api;

import de.rwth.idsg.steve.SteveException;
import de.rwth.idsg.steve.web.LocalDateTimeEditor;
import de.rwth.idsg.steve.web.api.exception.BadRequestException;
import de.rwth.idsg.steve.web.api.exception.NotFoundException;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.joda.time.LocalDateTime;
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
Expand All @@ -38,6 +35,8 @@

import jakarta.servlet.http.HttpServletRequest;

import java.time.Instant;

/**
* @author Sevket Goekay <sevketgokay@gmail.com>
* @since 13.09.2022
Expand All @@ -49,7 +48,7 @@ public class ApiControllerAdvice {
@InitBinder
public void binder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
binder.registerCustomEditor(LocalDateTime.class, LocalDateTimeEditor.forApi());
binder.registerCustomEditor(Instant.class, new InstantEditor());
}

@ExceptionHandler(BindException.class)
Expand Down Expand Up @@ -103,7 +102,7 @@ public ApiErrorResponse handleException(HttpServletRequest req, Exception except
public static ApiErrorResponse createResponse(String url, HttpStatus status, String message) {
ApiErrorResponse result = new ApiErrorResponse();

result.setTimestamp(DateTime.now());
result.setTimestamp(Instant.now());
result.setStatus(status.value());
result.setError(status.getReasonPhrase());
result.setMessage(message);
Expand All @@ -114,11 +113,10 @@ public static ApiErrorResponse createResponse(String url, HttpStatus status, Str

@Data
public static class ApiErrorResponse {
private DateTime timestamp;
private Instant timestamp;
private int status;
private String error;
private String message;
private String path;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.RequestMapping;

import java.time.ZoneOffset;
import java.util.List;

import jakarta.validation.Valid;
Expand Down Expand Up @@ -78,7 +79,7 @@ public ApiConnectorList getConnectors(@Valid ConnectorStatusForm queryParams) {
@StandardApiResponses
@GetMapping(value = "OCPP_JSON_STATUS")
public List<OcppJsonStatus> getOcppJsonStatus() {
return chargePointHelperService.getOcppJsonStatus();
return chargePointHelperService.getOcppJsonStatus(ZoneOffset.UTC);
}

// -------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,51 +16,41 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.rwth.idsg.steve.web;
package de.rwth.idsg.steve.web.api;

import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import lombok.extern.slf4j.Slf4j;

import java.beans.PropertyEditorSupport;
import java.time.Instant;

/**
* @author Sevket Goekay <sevketgokay@gmail.com>
* @since 04.01.2015
*/
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class LocalDateTimeEditor extends PropertyEditorSupport {

private final DateTimeFormatter dateTimeFormatter;

public static LocalDateTimeEditor forMvc() {
return new LocalDateTimeEditor(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm"));
}

public static LocalDateTimeEditor forApi() {
return new LocalDateTimeEditor(ISODateTimeFormat.localDateOptionalTimeParser());
}
@Slf4j
@RequiredArgsConstructor
public class InstantEditor extends PropertyEditorSupport {

@Override
public String getAsText() {
Object value = getValue();
if (value == null) {
return null;
} else {
return dateTimeFormatter.print((LocalDateTime) value);
}
if (value instanceof Instant instant) {
return instant.toString();
}
throw new IllegalArgumentException("Cannot convert " + value.getClass() + " to Instant");
}

@Override
public void setAsText(String text) {
if (Strings.isNullOrEmpty(text)) {
setValue(null);
} else {
setValue(dateTimeFormatter.parseLocalDateTime(text));
setValue(Instant.parse(text));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,17 @@
import de.rwth.idsg.steve.ocpp.RequestResult;
import de.rwth.idsg.steve.ocpp.TaskOrigin;
import io.swagger.v3.oas.annotations.media.Schema;

import java.time.OffsetDateTime;
import java.util.Map;

import lombok.Getter;
import lombok.Setter;
import org.joda.time.DateTime;

/**
* @author fnkbsi
* @since 18.10.2023
*/

@Getter
@Setter
public class ApiTaskInfo {
Expand All @@ -54,9 +54,9 @@ public class ApiTaskInfo {
private int resultSize;

@Schema(description = "Starttime")
private DateTime startTimestamp;
private OffsetDateTime startTimestamp;
@Schema(description = "Endtime")
private DateTime endTimestamp;
private OffsetDateTime endTimestamp;

@Schema(description = "Error count")
private int errorCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.assertj.MockMvcTester;
import org.springframework.test.web.servlet.setup.StandaloneMockMvcBuilder;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
Expand All @@ -48,10 +48,10 @@ public abstract class AbstractControllerTest {
return objectMapper;
}

protected MockMvc buildMockMvc(StandaloneMockMvcBuilder builder) {
return builder.setControllerAdvice(new ApiControllerAdvice())
protected MockMvcTester buildMockMvc(StandaloneMockMvcBuilder builder) {
return MockMvcTester.create(builder.setControllerAdvice(new ApiControllerAdvice())
.setMessageConverters(new MappingJackson2HttpMessageConverter(objectMapper))
.alwaysExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.build();
.build());
}
}
Loading
Loading