Skip to content

Commit b8cbd38

Browse files
authored
#557: fix json mapping (#617)
1 parent f296ef9 commit b8cbd38

33 files changed

+181
-77
lines changed

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ This file documents all notable changes to https://github.com/devonfw/IDEasy[IDE
77
Release with new features and bugfixes:
88

99
* https://github.com/devonfw/IDEasy/issues/553[#554]: Missmatch of IDE_ROOT
10+
* https://github.com/devonfw/IDEasy/issues/557[#557]: Failed to update tomcat: Cannot find a (Map) Key deserializer for type VersionRange
1011

1112
The full list of changes for this release can be found in https://github.com/devonfw/IDEasy/milestone/13?closed=1[milestone 2024.09.002].
1213

cli/src/main/java/com/devonfw/tools/ide/github/GithubTag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devonfw.tools.ide.github;
22

3-
import com.devonfw.tools.ide.common.JsonVersionItem;
3+
import com.devonfw.tools.ide.json.JsonVersionItem;
44
import com.fasterxml.jackson.annotation.JsonProperty;
55

66
/**

cli/src/main/java/com/devonfw/tools/ide/github/GithubTags.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.ArrayList;
44

5-
import com.devonfw.tools.ide.common.JsonObject;
5+
import com.devonfw.tools.ide.json.JsonObject;
66

77
/**
88
* {@link JsonObject} for {@link GithubTag}s (refs).

cli/src/main/java/com/devonfw/tools/ide/json/mapping/JsonMapping.java renamed to cli/src/main/java/com/devonfw/tools/ide/json/JsonMapping.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
package com.devonfw.tools.ide.json.mapping;
1+
package com.devonfw.tools.ide.json;
22

3+
import com.devonfw.tools.ide.version.VersionIdentifier;
4+
import com.devonfw.tools.ide.version.VersionRange;
35
import com.fasterxml.jackson.annotation.JsonInclude;
46
import com.fasterxml.jackson.databind.DeserializationFeature;
57
import com.fasterxml.jackson.databind.ObjectMapper;
68
import com.fasterxml.jackson.databind.SerializationFeature;
9+
import com.fasterxml.jackson.databind.module.SimpleModule;
710
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
811

912
/**
@@ -22,6 +25,11 @@ public static ObjectMapper create() {
2225
mapper = mapper.enable(SerializationFeature.INDENT_OUTPUT);
2326
mapper = mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
2427
mapper = mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
28+
SimpleModule customModule = new SimpleModule();
29+
customModule.addDeserializer(VersionIdentifier.class, new VersionIdentifierDeserializer());
30+
customModule.addDeserializer(VersionRange.class, new VersionRangeDeserializer());
31+
customModule.addKeyDeserializer(VersionRange.class, new VersionRangeKeyDeserializer());
32+
mapper = mapper.registerModule(customModule);
2533
return mapper;
2634
}
2735

cli/src/main/java/com/devonfw/tools/ide/common/JsonObject.java renamed to cli/src/main/java/com/devonfw/tools/ide/json/JsonObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.devonfw.tools.ide.common;
1+
package com.devonfw.tools.ide.json;
22

33
/**
44
* Interface for a data object that can be read from and written to JSON.

cli/src/main/java/com/devonfw/tools/ide/common/JsonVersionItem.java renamed to cli/src/main/java/com/devonfw/tools/ide/json/JsonVersionItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.devonfw.tools.ide.common;
1+
package com.devonfw.tools.ide.json;
22

33
/**
44
* Interface for a data object that can be read from and written to JSON.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.devonfw.tools.ide.json;
2+
3+
import java.io.IOException;
4+
5+
import com.devonfw.tools.ide.version.VersionIdentifier;
6+
import com.fasterxml.jackson.core.JacksonException;
7+
import com.fasterxml.jackson.core.JsonParser;
8+
import com.fasterxml.jackson.core.JsonToken;
9+
import com.fasterxml.jackson.databind.DeserializationContext;
10+
import com.fasterxml.jackson.databind.JsonDeserializer;
11+
12+
/**
13+
* {@link JsonDeserializer} for {@link VersionIdentifier}.
14+
*/
15+
public class VersionIdentifierDeserializer extends JsonDeserializer<VersionIdentifier> {
16+
17+
@Override
18+
public VersionIdentifier deserialize(JsonParser p, DeserializationContext context) throws IOException, JacksonException {
19+
20+
JsonToken token = p.getCurrentToken();
21+
if (token == JsonToken.VALUE_STRING) {
22+
return VersionIdentifier.of(p.getValueAsString());
23+
} else {
24+
throw new IllegalArgumentException("Invalid JSON for VersionRange!");
25+
}
26+
}
27+
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.devonfw.tools.ide.json;
2+
3+
import java.io.IOException;
4+
5+
import com.devonfw.tools.ide.version.VersionRange;
6+
import com.fasterxml.jackson.core.JacksonException;
7+
import com.fasterxml.jackson.core.JsonParser;
8+
import com.fasterxml.jackson.core.JsonToken;
9+
import com.fasterxml.jackson.databind.DeserializationContext;
10+
import com.fasterxml.jackson.databind.JsonDeserializer;
11+
12+
/**
13+
* {@link JsonDeserializer} for {@link VersionRange}.
14+
*/
15+
public class VersionRangeDeserializer extends JsonDeserializer<VersionRange> {
16+
17+
@Override
18+
public VersionRange deserialize(JsonParser p, DeserializationContext context) throws IOException, JacksonException {
19+
20+
JsonToken token = p.getCurrentToken();
21+
if (token == JsonToken.VALUE_STRING) {
22+
return VersionRange.of(p.getValueAsString());
23+
} else {
24+
throw new IllegalArgumentException("Invalid JSON for VersionRange!");
25+
}
26+
}
27+
28+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.devonfw.tools.ide.json;
2+
3+
import java.io.IOException;
4+
5+
import com.devonfw.tools.ide.version.VersionRange;
6+
import com.fasterxml.jackson.databind.DeserializationContext;
7+
import com.fasterxml.jackson.databind.KeyDeserializer;
8+
9+
/**
10+
* {@link KeyDeserializer} for {@link VersionRange}.
11+
*/
12+
public class VersionRangeKeyDeserializer extends KeyDeserializer {
13+
14+
@Override
15+
public Object deserializeKey(String key, DeserializationContext context) throws IOException {
16+
17+
return VersionRange.of(key);
18+
}
19+
20+
}

cli/src/main/java/com/devonfw/tools/ide/npm/NpmJsonObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devonfw.tools.ide.npm;
22

3-
import com.devonfw.tools.ide.common.JsonObject;
3+
import com.devonfw.tools.ide.json.JsonObject;
44

55
/**
66
* {@link JsonObject} for Npm.

cli/src/main/java/com/devonfw/tools/ide/npm/NpmJsonVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devonfw.tools.ide.npm;
22

3-
import com.devonfw.tools.ide.common.JsonVersionItem;
3+
import com.devonfw.tools.ide.json.JsonVersionItem;
44
import com.fasterxml.jackson.annotation.JsonProperty;
55

66
/**

cli/src/main/java/com/devonfw/tools/ide/npm/NpmJsonVersions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.HashMap;
44
import java.util.Map;
55

6-
import com.devonfw.tools.ide.common.JsonObject;
6+
import com.devonfw.tools.ide.json.JsonObject;
77
import com.fasterxml.jackson.annotation.JsonAnySetter;
88

99
/**

cli/src/main/java/com/devonfw/tools/ide/tool/Dependency.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
import com.devonfw.tools.ide.context.IdeContext;
1212
import com.devonfw.tools.ide.url.model.file.UrlDependencyFile;
13-
import com.devonfw.tools.ide.url.model.file.dependencyJson.DependencyInfo;
13+
import com.devonfw.tools.ide.url.model.file.json.DependencyInfo;
1414
import com.devonfw.tools.ide.url.model.folder.UrlEdition;
1515
import com.devonfw.tools.ide.version.VersionIdentifier;
1616
import com.devonfw.tools.ide.version.VersionRange;

cli/src/main/java/com/devonfw/tools/ide/tool/LocalToolCommandlet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import com.devonfw.tools.ide.process.EnvironmentContext;
1717
import com.devonfw.tools.ide.repo.ToolRepository;
1818
import com.devonfw.tools.ide.step.Step;
19-
import com.devonfw.tools.ide.url.model.file.dependencyJson.DependencyInfo;
19+
import com.devonfw.tools.ide.url.model.file.json.DependencyInfo;
2020
import com.devonfw.tools.ide.version.VersionIdentifier;
2121

2222
/**

cli/src/main/java/com/devonfw/tools/ide/tool/androidstudio/AndroidJsonDownload.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devonfw.tools.ide.tool.androidstudio;
22

3-
import com.devonfw.tools.ide.common.JsonObject;
3+
import com.devonfw.tools.ide.json.JsonObject;
44
import com.fasterxml.jackson.annotation.JsonProperty;
55

66
/**

cli/src/main/java/com/devonfw/tools/ide/tool/androidstudio/AndroidJsonItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.List;
44

5-
import com.devonfw.tools.ide.common.JsonVersionItem;
5+
import com.devonfw.tools.ide.json.JsonVersionItem;
66
import com.fasterxml.jackson.annotation.JsonProperty;
77

88
/**

cli/src/main/java/com/devonfw/tools/ide/tool/androidstudio/AndroidJsonObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devonfw.tools.ide.tool.androidstudio;
22

3-
import com.devonfw.tools.ide.common.JsonObject;
3+
import com.devonfw.tools.ide.json.JsonObject;
44

55
/**
66
* {@link JsonObject} for Android Studio content.

cli/src/main/java/com/devonfw/tools/ide/tool/intellij/IntellijJsonObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.List;
44

5-
import com.devonfw.tools.ide.common.JsonObject;
5+
import com.devonfw.tools.ide.json.JsonObject;
66

77
/**
88
* {@link JsonObject} for Intellij content.

cli/src/main/java/com/devonfw/tools/ide/tool/intellij/IntellijJsonRelease.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.Map;
44

5-
import com.devonfw.tools.ide.common.JsonVersionItem;
5+
import com.devonfw.tools.ide.json.JsonVersionItem;
66
import com.fasterxml.jackson.annotation.JsonProperty;
77

88
/**

cli/src/main/java/com/devonfw/tools/ide/tool/intellij/IntellijUrlUpdater.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import java.util.Collection;
44
import java.util.List;
55

6-
import com.devonfw.tools.ide.common.JsonVersionItem;
7-
import com.devonfw.tools.ide.json.mapping.JsonMapping;
6+
import com.devonfw.tools.ide.json.JsonMapping;
7+
import com.devonfw.tools.ide.json.JsonVersionItem;
88
import com.devonfw.tools.ide.os.OperatingSystem;
99
import com.devonfw.tools.ide.os.SystemArchitecture;
1010
import com.devonfw.tools.ide.url.model.folder.UrlVersion;

cli/src/main/java/com/devonfw/tools/ide/tool/java/JavaJsonObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.List;
44

5-
import com.devonfw.tools.ide.common.JsonObject;
5+
import com.devonfw.tools.ide.json.JsonObject;
66

77
/**
88
* {@link JsonObject} for Java versions from adoptium REST API.

cli/src/main/java/com/devonfw/tools/ide/tool/java/JavaJsonVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devonfw.tools.ide.tool.java;
22

3-
import com.devonfw.tools.ide.common.JsonVersionItem;
3+
import com.devonfw.tools.ide.json.JsonVersionItem;
44
import com.fasterxml.jackson.annotation.JsonProperty;
55

66
/**

cli/src/main/java/com/devonfw/tools/ide/tool/python/PythonJsonObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.List;
44

5-
import com.devonfw.tools.ide.common.JsonObject;
5+
import com.devonfw.tools.ide.json.JsonObject;
66

77
/**
88
* Java object to represent the JSON of Python release information. This is the root {@link JsonObject}.

cli/src/main/java/com/devonfw/tools/ide/tool/python/PythonRelease.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.List;
44

5-
import com.devonfw.tools.ide.common.JsonVersionItem;
5+
import com.devonfw.tools.ide.json.JsonVersionItem;
66
import com.fasterxml.jackson.annotation.JsonProperty;
77

88
/**

cli/src/main/java/com/devonfw/tools/ide/tool/python/PythonUrlUpdater.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.slf4j.Logger;
77
import org.slf4j.LoggerFactory;
88

9-
import com.devonfw.tools.ide.json.mapping.JsonMapping;
9+
import com.devonfw.tools.ide.json.JsonMapping;
1010
import com.devonfw.tools.ide.url.model.folder.UrlVersion;
1111
import com.devonfw.tools.ide.url.updater.JsonUrlUpdater;
1212
import com.fasterxml.jackson.core.JsonProcessingException;

cli/src/main/java/com/devonfw/tools/ide/url/model/file/UrlDependencyFile.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import java.util.List;
88
import java.util.Map;
99

10-
import com.devonfw.tools.ide.json.mapping.JsonMapping;
11-
import com.devonfw.tools.ide.url.model.file.dependencyJson.DependencyInfo;
10+
import com.devonfw.tools.ide.json.JsonMapping;
11+
import com.devonfw.tools.ide.url.model.file.json.DependencyInfo;
1212
import com.devonfw.tools.ide.url.model.folder.UrlEdition;
1313
import com.devonfw.tools.ide.version.VersionIdentifier;
1414
import com.devonfw.tools.ide.version.VersionRange;

cli/src/main/java/com/devonfw/tools/ide/url/model/file/UrlStatusFile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import java.nio.file.Path;
77
import java.nio.file.StandardOpenOption;
88

9-
import com.devonfw.tools.ide.json.mapping.JsonMapping;
9+
import com.devonfw.tools.ide.json.JsonMapping;
1010
import com.devonfw.tools.ide.url.model.file.json.StatusJson;
1111
import com.devonfw.tools.ide.url.model.folder.UrlVersion;
1212
import com.fasterxml.jackson.databind.ObjectMapper;

cli/src/main/java/com/devonfw/tools/ide/url/model/file/dependencyJson/DependencyInfo.java renamed to cli/src/main/java/com/devonfw/tools/ide/url/model/file/json/DependencyInfo.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.devonfw.tools.ide.url.model.file.dependencyJson;
1+
package com.devonfw.tools.ide.url.model.file.json;
22

33
import com.devonfw.tools.ide.version.VersionRange;
44

@@ -9,7 +9,7 @@ public final class DependencyInfo {
99

1010
private String tool;
1111

12-
private String versionRange;
12+
private VersionRange versionRange;
1313

1414
/**
1515
* @return the dependency name
@@ -19,12 +19,21 @@ public String getTool() {
1919
return this.tool;
2020
}
2121

22+
void setTool(String tool) {
23+
24+
this.tool = tool;
25+
}
26+
2227
/**
2328
* @return the VersionRange of the dependency
2429
*/
2530
public VersionRange getVersionRange() {
2631

27-
return VersionRange.of(this.versionRange);
32+
return this.versionRange;
2833
}
2934

35+
void setVersionRange(VersionRange versionRange) {
36+
37+
this.versionRange = versionRange;
38+
}
3039
}

cli/src/main/java/com/devonfw/tools/ide/url/updater/JsonUrlUpdater.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
99

10-
import com.devonfw.tools.ide.common.JsonObject;
11-
import com.devonfw.tools.ide.common.JsonVersionItem;
12-
import com.devonfw.tools.ide.json.mapping.JsonMapping;
10+
import com.devonfw.tools.ide.json.JsonMapping;
11+
import com.devonfw.tools.ide.json.JsonObject;
12+
import com.devonfw.tools.ide.json.JsonVersionItem;
1313
import com.devonfw.tools.ide.url.model.folder.UrlEdition;
1414
import com.devonfw.tools.ide.url.model.folder.UrlRepository;
1515
import com.devonfw.tools.ide.url.model.folder.UrlTool;

0 commit comments

Comments
 (0)