Skip to content

Commit f3b8e6f

Browse files
First step in removing dependency on rosetta.common
1 parent cfaa36f commit f3b8e6f

File tree

2 files changed

+86
-2
lines changed

2 files changed

+86
-2
lines changed

pom.xml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@
9898
<maven-enforcer-plugin.version>3.3.0</maven-enforcer-plugin.version>
9999
<maven-checkstyle-plugin.version>3.4.0</maven-checkstyle-plugin.version>
100100
<maven-clean-plugin.version>3.1.0</maven-clean-plugin.version>
101-
<maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
102101
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
103102
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
104103
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
@@ -477,9 +476,24 @@
477476
<filter>
478477
<artifact>*:*</artifact>
479478
<excludes>
479+
<exclude>META-INF/LICENSE*</exclude>
480+
<exclude>META-INF/NOTICE*</exclude>
481+
<exclude>META-INF/DEPENDENCIES</exclude>
482+
<exclude>META-INF/eclipse.inf</exclude>
480483
<exclude>META-INF/*.SF</exclude>
481484
<exclude>META-INF/*.DSA</exclude>
482485
<exclude>META-INF/*.RSA</exclude>
486+
<exclude>META-INF.versions.9.module-info</exclude>
487+
<exclude>META-INF/services/com.fasterxml.jackson.databind.Module</exclude>
488+
<exclude>about_files/LICENSE-2.0.txt</exclude>
489+
<exclude>about.html</exclude>
490+
<exclude>about.ini</exclude>
491+
<exclude>about.mappings</exclude>
492+
<exclude>about.properties</exclude>
493+
<exclude>plugin.xml</exclude>
494+
<exclude>modeling32.png</exclude>
495+
<exclude>.options</exclude>
496+
<exclude>.api_description</exclude>
483497
</excludes>
484498
</filter>
485499
</filters>

src/main/java/com/regnosys/rosetta/generator/python/PythonCodeGeneratorCLI.java

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.google.inject.Provider;
66
import com.regnosys.rosetta.RosettaRuntimeModule;
77
import com.regnosys.rosetta.RosettaStandaloneSetup;
8+
import com.regnosys.rosetta.builtin.RosettaBuiltinsService;
89
import com.regnosys.rosetta.common.util.ClassPathUtils;
910
import com.regnosys.rosetta.common.util.UrlUtils;
1011
import com.regnosys.rosetta.generator.external.ExternalGenerator;
@@ -15,6 +16,7 @@
1516
import org.eclipse.emf.ecore.resource.Resource;
1617
import org.eclipse.emf.ecore.resource.ResourceSet;
1718
import org.eclipse.xtext.resource.XtextResourceSet;
19+
import org.eclipse.emf.common.util.URI;
1820
import org.jetbrains.annotations.NotNull;
1921
import org.slf4j.Logger;
2022
import org.slf4j.LoggerFactory;
@@ -90,6 +92,7 @@ public static void main(String[] args) {
9092
if (cmd.hasOption("s")) {
9193
String srcDir = cmd.getOptionValue("s");
9294
translateFromSourceDir(srcDir, tgtDir);
95+
translateFromSourceDir2(srcDir, tgtDir + "-2");
9396
} else if (cmd.hasOption("f")) {
9497
String srcFile = cmd.getOptionValue("f");
9598
translateFromSourceFile(srcFile, tgtDir);
@@ -132,6 +135,63 @@ private static void translateFromSourceDir(String srcDir, String tgtDir) {
132135
translateRosetta(rosettaFiles, tgtDir);
133136
}
134137

138+
private static void translateFromSourceDir2(String srcDir, String tgtDir) {
139+
LOGGER.info("translateFromSourceDir2 ... Reading from directory: {} and writing to: {}", srcDir, tgtDir);
140+
Path srcDirPath = Paths.get(srcDir);
141+
if (!Files.exists(srcDirPath)) {
142+
System.err.println("Source directory does not exist: " + srcDir);
143+
return;
144+
}
145+
if (!Files.isDirectory(srcDirPath)) {
146+
System.err.println("Source directory is not a directory: " + srcDir);
147+
return;
148+
}
149+
Injector injector = new PythonRosettaStandaloneSetup().createInjectorAndDoEMFRegistration();
150+
PythonCodeGenerator pythonCodeGenerator = injector.getInstance(PythonCodeGenerator.class);
151+
PythonModelLoader modelLoader = injector.getInstance(PythonModelLoader.class);
152+
ResourceSet resourceSet = injector.getInstance(ResourceSet.class);
153+
154+
List<Resource> resources = new LinkedList<>();
155+
156+
RosettaBuiltinsService builtins = injector.getInstance(RosettaBuiltinsService.class);
157+
resources.add (resourceSet.getResource(builtins.basicTypesURI, true));
158+
resources.add (resourceSet.getResource(builtins.annotationsURI, true));
159+
try {
160+
// Find all .rosetta files in the directory and load them from disk
161+
Files.walk(srcDirPath)
162+
.filter(path -> path.toString().endsWith(".rosetta"))
163+
.map(file -> resourceSet.getResource(URI.createFileURI(file.toString()), true))
164+
.forEach(resources::add);
165+
} catch (IOException e) {
166+
System.err.println("Error reading source directory: " + e.getMessage());
167+
return;
168+
}
169+
LOGGER.info("translateFromSourceDir2 ... Found {} .rosetta files in directory {}", resources.size(), srcDir);
170+
171+
172+
List<RosettaModel> models = modelLoader.rosettaModels2(resources);
173+
if (models.isEmpty()) {
174+
System.err.println("No valid Rosetta models found.");
175+
return;
176+
}
177+
String version = models.get(0).getVersion();
178+
179+
LOGGER.info("translateFromSourceDir2 ... Processing {} models, version: {}", models.size(), version);
180+
181+
Map<String, CharSequence> generatedPython = new HashMap<>();
182+
pythonCodeGenerator.beforeAllGenerate(resourceSet, models, version);
183+
for (RosettaModel model : models) {
184+
System.out.println("translateFromSourceDir2 ... processing: " + model.getName());
185+
generatedPython.putAll(pythonCodeGenerator.beforeGenerate(model.eResource(), model, version));
186+
generatedPython.putAll(pythonCodeGenerator.generate(model.eResource(), model, version));
187+
generatedPython.putAll(pythonCodeGenerator.afterGenerate(model.eResource(), model, version));
188+
}
189+
generatedPython.putAll(pythonCodeGenerator.afterAllGenerate(resourceSet, models, version));
190+
191+
writePythonFiles(generatedPython, tgtDir);
192+
}
193+
194+
135195
private static void translateFromSourceFile(String srcFile, String tgtDir) {
136196
LOGGER.info("Reading from file: {} and writing to: {}", srcFile, tgtDir);
137197
Path srcFilePath = Paths.get(srcFile);
@@ -169,13 +229,14 @@ private static void translateRosetta(List<Path> rosettaFiles, String tgtDir) {
169229
return;
170230
}
171231
XtextResourceSet resourceSet = modelLoader.getResourceSet();
172-
String version = models.getFirst().getVersion();
232+
String version = models.get(0).getVersion();
173233

174234
LOGGER.info("Processing {} models, version: {}", models.size(), version);
175235

176236
Map<String, CharSequence> generatedPython = new HashMap<>();
177237
pythonCodeGenerator.beforeAllGenerate(resourceSet, models, version);
178238
for (RosettaModel model : models) {
239+
System.out.println("translateRosetta ... processing: " + model.getName());
179240
generatedPython.putAll(pythonCodeGenerator.beforeGenerate(model.eResource(), model, version));
180241
generatedPython.putAll(pythonCodeGenerator.generate(model.eResource(), model, version));
181242
generatedPython.putAll(pythonCodeGenerator.afterGenerate(model.eResource(), model, version));
@@ -220,6 +281,15 @@ public List<RosettaModel> rosettaModels(List<Path> statics, List<Path> sourceFil
220281
.collect(Collectors.toList());
221282
}
222283

284+
public List<RosettaModel> rosettaModels2(List<Resource> resources) {
285+
return resources.stream()
286+
.filter(Objects::nonNull)
287+
.map(Resource::getContents)
288+
.flatMap(Collection::stream)
289+
.filter(r -> r instanceof RosettaModel)
290+
.map(r -> (RosettaModel) r)
291+
.collect(Collectors.toList());
292+
}
223293
public XtextResourceSet getResourceSet() {
224294
return resourceSetProvider.get();
225295
}

0 commit comments

Comments
 (0)