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()) {

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to