From 6443cf2f89298b146040acbdfc36335733961489 Mon Sep 17 00:00:00 2001 From: 4KevR <50447092+4KevR@users.noreply.github.com> Date: Wed, 15 Jul 2026 00:01:41 +0200 Subject: [PATCH 1/3] feat: add terminal argument for architecture model serialization --- .../ardoco/codemodelextractor/cli/Cli.java | 67 +++++++++++++++++-- 1 file changed, 60 insertions(+), 7 deletions(-) diff --git a/src/main/java/edu/kit/kastel/mcse/ardoco/codemodelextractor/cli/Cli.java b/src/main/java/edu/kit/kastel/mcse/ardoco/codemodelextractor/cli/Cli.java index 114d83c..958fbac 100644 --- a/src/main/java/edu/kit/kastel/mcse/ardoco/codemodelextractor/cli/Cli.java +++ b/src/main/java/edu/kit/kastel/mcse/ardoco/codemodelextractor/cli/Cli.java @@ -1,4 +1,4 @@ -/* Licensed under MIT 2025. */ +/* Licensed under MIT 2025-2026. */ package edu.kit.kastel.mcse.ardoco.codemodelextractor.cli; import java.io.File; @@ -6,9 +6,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import edu.kit.kastel.mcse.ardoco.core.api.models.ArchitectureModel; import edu.kit.kastel.mcse.ardoco.core.api.models.CodeModel; import edu.kit.kastel.mcse.ardoco.core.api.models.Metamodel; import edu.kit.kastel.mcse.ardoco.core.api.models.code.CodeItemRepository; +import edu.kit.kastel.mcse.ardoco.tlr.models.connectors.generators.architecture.ArchitectureExtractor; +import edu.kit.kastel.mcse.ardoco.tlr.models.connectors.generators.architecture.listing.ComponentListingArchitectureExtractor; +import edu.kit.kastel.mcse.ardoco.tlr.models.connectors.generators.architecture.pcm.PcmExtractor; +import edu.kit.kastel.mcse.ardoco.tlr.models.connectors.generators.architecture.uml.UmlExtractor; import edu.kit.kastel.mcse.ardoco.tlr.models.connectors.generators.code.AllLanguagesExtractor; public final class Cli { @@ -19,17 +24,31 @@ private Cli() { } public static void main(String[] args) { - if (args.length != 2) { + if (args.length < 1) { printUsage(); } - File codeDirectory = new File(args[0]); + switch (args[0]) { + case "code" -> runCode(args); + case "architecture" -> runArchitecture(args); + default -> { + logger.error("Unknown mode: {}", args[0]); + printUsage(); + } + } + } + + private static void runCode(String[] args) { + if (args.length != 3) { + printUsage(); + } + File codeDirectory = new File(args[1]); if (!codeDirectory.isDirectory()) { - logger.error("Provided path {} is no directory", args[0]); + logger.error("Provided path {} is no directory", args[1]); printUsage(); } - File destination = new File(args[1]); + File destination = new File(args[2]); if (destination.exists() && !destination.isFile()) { - logger.error("Destination is not a valid file: {}", args[1]); + logger.error("Destination is not a valid file: {}", args[2]); printUsage(); } @@ -40,8 +59,42 @@ public static void main(String[] args) { codeExtractor.writeOutCodeModel(model, destination); } + private static void runArchitecture(String[] args) { + if (args.length != 4) { + printUsage(); + } + String format = args[1]; + File modelFile = new File(args[2]); + if (!modelFile.isFile()) { + logger.error("Provided path {} is not a file", args[2]); + printUsage(); + } + File destination = new File(args[3]); + if (destination.exists() && !destination.isFile()) { + logger.error("Destination is not a valid file: {}", args[3]); + printUsage(); + } + + ArchitectureExtractor extractor = switch (format) { + case "uml" -> new UmlExtractor(modelFile.getAbsolutePath(), Metamodel.ARCHITECTURE_WITH_COMPONENTS_AND_INTERFACES); + case "pcm" -> new PcmExtractor(modelFile.getAbsolutePath(), Metamodel.ARCHITECTURE_WITH_COMPONENTS_AND_INTERFACES); + case "component_listing" -> new ComponentListingArchitectureExtractor(modelFile.getAbsolutePath(), + Metamodel.ARCHITECTURE_WITH_COMPONENTS_AND_INTERFACES); + default -> { + logger.error("Unknown architecture format: {}. Supported: uml, pcm, component_listing", format); + printUsage(); + yield null; + } + }; + + ArchitectureModel model = extractor.extractModel(); + extractor.writeOutArchitectureModel(model, destination); + } + private static void printUsage() { - logger.info("Usage: java -jar code-model-extractor.jar <> <>"); + logger.info("Usage:"); + logger.info(" java -jar code-model-extractor.jar code "); + logger.info(" java -jar code-model-extractor.jar architecture "); System.exit(1); } } From 5a7610d9fd81a9577f5d8af941ace9b308a773cb Mon Sep 17 00:00:00 2001 From: 4KevR <50447092+4KevR@users.noreply.github.com> Date: Mon, 24 Aug 2026 09:20:26 +0200 Subject: [PATCH 2/3] update version to 2.1.0-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bacdc97..c37cfd6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ io.github.ardoco parent - 2.0.1 + 2.1.0-SNAPSHOT code-model-extractor-cli From 06575196dbc9822cf47373e6e3f4e818b2b6c4e0 Mon Sep 17 00:00:00 2001 From: 4KevR <50447092+4KevR@users.noreply.github.com> Date: Mon, 24 Aug 2026 10:22:44 +0200 Subject: [PATCH 3/3] update readme --- README.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 71ee8f5..06e2958 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,19 @@ # Code Model Extractor Cli -A small cli that can generate code model files for ArDoCo. +A small cli that can generate code and architecture model files for ArDoCo. ## Install Run `mvn package` ## Usage -Run `java -jar code-model-extractor.jar <> <>` -E.g., `java -jar target/code-model-extractor.jar ./src/main/java model.json` +### Code model + +Run `java -jar code-model-extractor.jar code ` + +E.g., `java -jar target/code-model-extractor.jar code ./src/main/java model.json` + +### Architecture model + +Run `java -jar code-model-extractor.jar architecture ` + +E.g., `java -jar target/code-model-extractor.jar architecture uml ./model.uml architecture.json`