Gilles Filippini a écrit le 17/05/2020 à 23:29 : > Gilles Filippini a écrit le 17/05/2020 à 22:51 : >> Hi Martin, >> >> Martin Quinson a écrit le 17/05/2020 à 22:31 : >>> Hello again, >>> >>> when I try to launch the program with your patch applied, I get the >>> following backtrace: >>> >>> Exception in thread "main" java.lang.ClassCastException: class >>> org.json.simple.JsonArray cannot be cast to class >>> org.json.simple.JsonObject (org.json.simple.JsonArray and >>> org.json.simple.JsonObject are in unnamed module of loader 'app') >>> at plm.core.model.Users.loadUsersFromFile(Unknown Source) >>> at plm.core.model.Users.<init>(Unknown Source) >>> at plm.core.model.Game.<init>(Unknown Source) >>> at plm.core.model.Game.getInstance(Unknown Source) >>> at plm.core.ui.ProgrammersLearningMachine.main(Unknown Source) >>> >>> I will try to fix it in the near future, but your help would of course >>> be welcome. Don't modify your patch as it is applied and burried under >>> other changes already. Instead, please propose another patch on top of >>> the current state in the package in >>> https://salsa.debian.org/java-team/plm/ >> >> I'll have a look at this. > > Could you give me an example of plm.users file causing this error?
Here is a patch to apply on top of your current git repo. It fixes plm.users read / write and sessions- welcome.summary read. Best, _g.
diff --git a/debian/patches/json-simple-3.patch b/debian/patches/json-simple-3.patch index ed5c9d9..141c4a7 100644 --- a/debian/patches/json-simple-3.patch +++ b/debian/patches/json-simple-3.patch @@ -164,9 +164,11 @@ Index: plm-2.6+repack/src/plm/core/model/session/SessionDB.java =================================================================== --- plm-2.6+repack.orig/src/plm/core/model/session/SessionDB.java +++ plm-2.6+repack/src/plm/core/model/session/SessionDB.java -@@ -4,9 +4,9 @@ import java.util.HashMap; +@@ -3,10 +3,11 @@ package plm.core.model.session; + import java.util.HashMap; import java.util.Map; import java.util.Set; ++import java.math.BigDecimal; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; @@ -177,7 +179,7 @@ Index: plm-2.6+repack/src/plm/core/model/session/SessionDB.java import plm.core.lang.ProgrammingLanguage; import plm.core.model.Game; -@@ -154,7 +154,7 @@ public class SessionDB { +@@ -154,7 +155,7 @@ public class SessionDB { public String lessonSummary(String lesson) { @@ -186,7 +188,7 @@ Index: plm-2.6+repack/src/plm/core/model/session/SessionDB.java Map<ProgrammingLanguage, Integer> possibleL = possibleExercises.get(lesson); for (ProgrammingLanguage pl: possibleL.keySet()) -@@ -166,15 +166,14 @@ public class SessionDB { +@@ -166,15 +167,14 @@ public class SessionDB { if (passedL.get(pl)!=0) result.put("passed"+pl.getLang(), passedL.get(pl)); @@ -206,6 +208,23 @@ Index: plm-2.6+repack/src/plm/core/model/session/SessionDB.java System.out.println("Ignoring invalid lesson summary (parse error: "+e.getLocalizedMessage()+")."); return; } +@@ -186,12 +186,12 @@ public class SessionDB { + + for (ProgrammingLanguage pl: Game.getProgrammingLanguages()) { + if (data.containsKey("possible"+pl.getLang())) { +- Long v = (Long) data.get("possible"+pl.getLang()); +- possibleL.put(pl, v.intValue()); ++ Integer v = ((BigDecimal) data.get("possible"+pl.getLang())).intValue(); ++ possibleL.put(pl, v); + } + if (data.containsKey("passed"+pl.getLang())) { +- Long v = (Long) data.get("passed"+pl.getLang()); // damn, damn java casting madness +- passedL.put(pl, v.intValue()); ++ Integer v = ((BigDecimal) data.get("passed"+pl.getLang())).intValue(); // damn, damn java casting madness ++ passedL.put(pl, v); + } + } + } Index: plm-2.6+repack/src/plm/core/model/session/ZipSessionKit.java =================================================================== --- plm-2.6+repack.orig/src/plm/core/model/session/ZipSessionKit.java @@ -430,7 +449,12 @@ Index: plm-2.6+repack/src/plm/core/model/User.java =================================================================== --- plm-2.6+repack.orig/src/plm/core/model/User.java +++ plm-2.6+repack/src/plm/core/model/User.java -@@ -6,10 +6,10 @@ import java.util.LinkedHashMap; +@@ -2,14 +2,15 @@ package plm.core.model; + + import java.io.IOException; + import java.io.Writer; ++import java.io.StringWriter; + import java.util.LinkedHashMap; import java.util.Objects; import java.util.UUID; @@ -444,7 +468,7 @@ Index: plm-2.6+repack/src/plm/core/model/User.java private String username; private boolean lastUsed; private UUID userUUID; -@@ -27,12 +27,16 @@ public class User implements JSONStreamA +@@ -27,12 +28,23 @@ public class User implements JSONStreamA } @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -459,7 +483,14 @@ Index: plm-2.6+repack/src/plm/core/model/User.java + } + + public String toJson() { -+ return toString(); ++ StringWriter writer = new StringWriter(); ++ try { ++ toJson(writer); ++ return writer.toString(); ++ } ++ catch (IOException e) { ++ return ""; ++ } } @Override @@ -498,7 +529,7 @@ Index: plm-2.6+repack/src/plm/core/model/Users.java - }; try { - List json = (List) parser.parse(new FileReader(userDBFile), containerFactory); -+ JsonArray json = Jsoner.deserializeMany(new FileReader(userDBFile)); ++ JsonArray json = (JsonArray) Jsoner.deserialize(new FileReader(userDBFile)); Iterator iter = json.iterator(); while (iter.hasNext()) {
signature.asc
Description: OpenPGP digital signature