From 00e659a6d34e6c3948bfbc49827fb926886455da Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Sun, 8 Feb 2026 12:34:54 +0530 Subject: [PATCH 1/3] Fix Java concoredocker to match Python behavior --- concoredocker.java | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/concoredocker.java b/concoredocker.java index b9813de..ec5f9a7 100644 --- a/concoredocker.java +++ b/concoredocker.java @@ -16,6 +16,7 @@ public class concoredocker { private static String inpath = "/in"; private static String outpath = "/out"; private static Map params = new HashMap<>(); + private static int simtime = 0; private static int maxtime; public static void main(String[] args) { @@ -63,19 +64,19 @@ private static Map parseFile(String filename) throws IOException private static void defaultMaxTime(int defaultValue) { try { String content = new String(Files.readAllBytes(Paths.get(inpath + "1/concore.maxtime"))); - // changed assumption from map to list for maxtime, as it usually represents a list of time steps - maxtime = ((List) literalEval(content)).size(); - } catch (IOException e) { + maxtime = ((Number) literalEval(content)).intValue(); + } catch (Exception e) { maxtime = defaultValue; } } - private static void unchanged() { + private static boolean unchanged() { if (olds.equals(s)) { s = ""; - } else { - olds = s; + return true; } + olds = s; + return false; } private static Object tryParam(String n, Object i) { @@ -95,9 +96,13 @@ private static Object read(int port, String name, String initstr) { retrycount++; } s += ins; - Object[] inval = ((List) literalEval(ins)).toArray(); // FIXED: Casted to List, converted to Array - int simtime = Math.max((int) inval[0], 0); // assuming simtime is an integer - return inval[1]; + List inval = (List) literalEval(ins); + simtime = Math.max(simtime, ((Number) inval.get(0)).intValue()); + Object[] val = new Object[inval.size() - 1]; + for (int i = 1; i < inval.size(); i++) { + val[i - 1] = inval.get(i); + } + return val; } catch (IOException | InterruptedException | ClassCastException e) { return initstr; } @@ -110,13 +115,13 @@ private static void write(int port, String name, Object val, int delta) { if (val instanceof String) { Thread.sleep(2 * delay); } else if (!(val instanceof Object[])) { - System.out.println("mywrite must have list or str"); - System.exit(1); + System.out.println("write must have list or str"); + return; } if (val instanceof Object[]) { Object[] arrayVal = (Object[]) val; content.append("[") - .append(maxtime + delta) + .append(simtime + delta) .append(",") .append(arrayVal[0]); for (int i = 1; i < arrayVal.length; i++) { @@ -124,6 +129,7 @@ private static void write(int port, String name, Object val, int delta) { .append(arrayVal[i]); } content.append("]"); + simtime += delta; } else { content.append(val); } @@ -134,13 +140,14 @@ private static void write(int port, String name, Object val, int delta) { } private static Object[] initVal(String simtimeVal) { - int simtime = 0; Object[] val = new Object[] {}; try { - Object[] arrayVal = ((List) literalEval(simtimeVal)).toArray(); // FIXED: Casted to List, converted to Array - simtime = (int) arrayVal[0]; // assuming simtime is an integer - val = new Object[arrayVal.length - 1]; - System.arraycopy(arrayVal, 1, val, 0, val.length); + List inval = (List) literalEval(simtimeVal); + simtime = ((Number) inval.get(0)).intValue(); + val = new Object[inval.size() - 1]; + for (int i = 1; i < inval.size(); i++) { + val[i - 1] = inval.get(i); + } } catch (Exception e) { e.printStackTrace(); } From c9706e57b03a7564beeab9309431eb254e2a8178 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Mon, 9 Feb 2026 11:53:36 +0530 Subject: [PATCH 2/3] Use targeted exceptions instead of generic Exception in defaultMaxTime --- concoredocker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/concoredocker.java b/concoredocker.java index ec5f9a7..345f8b3 100644 --- a/concoredocker.java +++ b/concoredocker.java @@ -65,7 +65,7 @@ private static void defaultMaxTime(int defaultValue) { try { String content = new String(Files.readAllBytes(Paths.get(inpath + "1/concore.maxtime"))); maxtime = ((Number) literalEval(content)).intValue(); - } catch (Exception e) { + } catch (IOException | ClassCastException | NumberFormatException e) { maxtime = defaultValue; } } From ad7a68829c13bb402ee4554eba9ee71ce7ea1bf5 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Mon, 9 Feb 2026 12:23:19 +0530 Subject: [PATCH 3/3] Fix path construction in read() and write() functions --- concoredocker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/concoredocker.py b/concoredocker.py index d337c38..c81e730 100644 --- a/concoredocker.py +++ b/concoredocker.py @@ -227,7 +227,7 @@ def read(port_identifier, name, initstr_val): time.sleep(delay) # Construct file path consistent with other components (e.g., /in1/) - file_path = os.path.join(inpath + str(file_port_num), name) + file_path = os.path.join(inpath, str(file_port_num), name) try: with open(file_path, "r") as infile: @@ -284,7 +284,7 @@ def write(port_identifier, name, val, delta=0): try: file_port_num = int(port_identifier) - file_path = os.path.join(outpath + str(file_port_num), name) + file_path = os.path.join(outpath, str(file_port_num), name) except ValueError: logging.error(f"Error: Invalid port identifier '{port_identifier}' for file operation. Must be integer or ZMQ name.") return