2222
2323import com .google .common .collect .ImmutableList ;
2424import hu .blackbelt .epsilon .runtime .execution .ExecutionContext ;
25+ import org .eclipse .emf .ecore .resource .Resource ;
26+ import org .eclipse .emf .ecore .xmi .XMLResource ;
27+ import org .eclipse .emf .ecore .xmi .impl .URIHandlerImpl ;
2528import org .slf4j .Logger ;
2629import hu .blackbelt .epsilon .runtime .execution .impl .BufferedSlf4jLogger ;
2730import hu .blackbelt .judo .meta .liquibase .ChangeSet ;
4851import java .net .URI ;
4952import java .net .URISyntaxException ;
5053import java .sql .Connection ;
54+ import java .util .HashMap ;
55+ import java .util .Map ;
5156import java .util .Optional ;
5257
5358import static hu .blackbelt .epsilon .runtime .execution .ExecutionContext .executionContextBuilder ;
@@ -93,7 +98,6 @@ public void executeExcel2RdbmsModel(RdbmsDatasourceFixture datasource) throws Ex
9398 // Execution context
9499 ExecutionContext excelToRdbmsEtlContext = executionContextBuilder ()
95100 .log (bufferedLog )
96- .resourceSet (originalModel .getResourceSet ())
97101 .modelContexts (ImmutableList .of (
98102 excelModelContextBuilder ()
99103 .name ("EXCEL" )
@@ -104,11 +108,15 @@ public void executeExcel2RdbmsModel(RdbmsDatasourceFixture datasource) throws Ex
104108 wrappedEmfModelContextBuilder ()
105109 .name ("ORIGINAL_MODEL" )
106110 .aliases (singletonList ("ORIGINAL" ))
111+ .useCache (true )
112+ .newModel (true )
107113 .resource (originalModel .getResource ())
108114 .build (),
109115 wrappedEmfModelContextBuilder ()
110116 .name ("NEW_MODEL" )
111117 .aliases (singletonList ("NEW" ))
118+ .useCache (true )
119+ .newModel (true )
112120 .resource (newModel .getResource ())
113121 .build ()))
114122 .build ();
@@ -121,6 +129,7 @@ public void executeExcel2RdbmsModel(RdbmsDatasourceFixture datasource) throws Ex
121129 etlExecutionContextBuilder ()
122130 .source (UriUtil .resolve ("createExcelModel.etl" , testRoot ))
123131 .parameters (singletonList (programParameterBuilder ().name ("dialect" ).value (dialect ).build ()))
132+ .parallel (true )
124133 .build ());
125134
126135 excelToRdbmsEtlContext .commit ();
@@ -137,8 +146,16 @@ public void executeExcel2RdbmsModel(RdbmsDatasourceFixture datasource) throws Ex
137146 .orElseThrow (() -> new RuntimeException ("There are no fields in model: " + newModel .getName ()))
138147 .forEach (field -> replaceTypeNames (field , dialect ));
139148
140- saveRdbms (originalModel , dialect );
141- saveRdbms (newModel , dialect );
149+ saveRdbms ("original" , originalModel , dialect );
150+ saveRdbms ("new" , newModel , dialect );
151+
152+ /*
153+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
154+ originalModel.getResource().save(baos, defaultSaveOptions());
155+ baos.flush();
156+ baos.close();
157+ log.info(new String(baos.toByteArray(), "UTF-8"));
158+ */
142159
143160 // fill models
144161 /////////////////////////////////////////
@@ -147,6 +164,8 @@ public void executeExcel2RdbmsModel(RdbmsDatasourceFixture datasource) throws Ex
147164 executeRdbms2LiquibaseTransformation (rdbms2LiquibaseParameter ()
148165 .rdbmsModel (originalModel )
149166 .liquibaseModel (originalLiquibaseModel )
167+ .parallel (true )
168+ .useCache (true )
150169 .dialect (dialect ));
151170
152171 saveLiquibase (originalLiquibaseModel , dialect );
@@ -158,7 +177,7 @@ public void executeExcel2RdbmsModel(RdbmsDatasourceFixture datasource) throws Ex
158177 RdbmsModel incrementalModel = buildRdbmsModel ().build ();
159178 transformRdbmsIncrementalModel (originalModel , newModel , incrementalModel , dialect , true );
160179
161- saveRdbms (incrementalModel , dialect );
180+ saveRdbms ("incremental" , incrementalModel , dialect );
162181
163182 LiquibaseModel dbCheckupModel = buildLiquibaseModel ().name ("DbCheckup" ).build ();
164183 LiquibaseModel dbBackupLiquibaseModel = buildLiquibaseModel ().name ("DbBackup" ).build ();
@@ -232,6 +251,48 @@ public void executeExcel2RdbmsModel(RdbmsDatasourceFixture datasource) throws Ex
232251 liquibaseDb .close ();
233252 }
234253
254+ /*
255+ public void copyResource(Resource from, Resource to) throws IOException {
256+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
257+ from.save(baos, defaultSaveOptions());
258+ baos.flush();
259+ baos.close();
260+ //log.info(new String(baos.toByteArray(), "UTF-8"));
261+ to.load(new ByteArrayInputStream(baos.toByteArray()), defaultLoadOptions());
262+ }
263+
264+ public Map<Object, Object> defaultSaveOptions() {
265+ Map<Object, Object> saveOptions = new HashMap<>();
266+ saveOptions.put(XMLResource.OPTION_DECLARE_XML, Boolean.TRUE);
267+ saveOptions.put(XMLResource.OPTION_PROCESS_DANGLING_HREF, XMLResource.OPTION_PROCESS_DANGLING_HREF_DISCARD);
268+ saveOptions.put(XMLResource.OPTION_URI_HANDLER, new URIHandlerImpl() {
269+ public org.eclipse.emf.common.util.URI deresolve(org.eclipse.emf.common.util.URI uri) {
270+ return uri.hasFragment()
271+ && uri.hasOpaquePart()
272+ && this.baseURI.hasOpaquePart()
273+ && uri.opaquePart().equals(this.baseURI.opaquePart())
274+ ? org.eclipse.emf.common.util.URI.createURI("#" + uri.fragment())
275+ : super.deresolve(uri);
276+ }
277+ });
278+ saveOptions.put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
279+ saveOptions.put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE);
280+ saveOptions.put(XMLResource.OPTION_SKIP_ESCAPE_URI, Boolean.FALSE);
281+ saveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8");
282+ return saveOptions;
283+ }
284+
285+ public Map<Object, Object> defaultLoadOptions() {
286+ Map<Object, Object> loadOptions = new HashMap<>();
287+ //loadOptions.put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
288+ //loadOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
289+ loadOptions.put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE);
290+ loadOptions.put(XMLResource.OPTION_LAX_FEATURE_PROCESSING, Boolean.TRUE);
291+ loadOptions.put(XMLResource.OPTION_PROCESS_DANGLING_HREF, XMLResource.OPTION_PROCESS_DANGLING_HREF_DISCARD);
292+ return loadOptions;
293+ }
294+ */
295+
235296 private static void replaceTypeNames (final RdbmsField field , final String dialect ) {
236297 final String typeName = field .getRdbmsTypeName ();
237298 if (typeName .equals ("Number" )) {
@@ -260,8 +321,8 @@ private static void runLiquibaseChangeSet(LiquibaseModel liquibaseModel, Databas
260321 ), liquibaseDb ).update ("" );
261322 }
262323
263- private static void saveRdbms (RdbmsModel rdbmsModel , String dialect ) {
264- File incrementalRdbmsFile = new File (TARGET_TEST_CLASSES , getRdbmsFileName (rdbmsModel , dialect ));
324+ private static void saveRdbms (String name , RdbmsModel rdbmsModel , String dialect ) {
325+ File incrementalRdbmsFile = new File (TARGET_TEST_CLASSES , getRdbmsFileName (name , rdbmsModel , dialect ));
265326 try {
266327 rdbmsModel .saveRdbmsModel (rdbmsSaveArgumentsBuilder ().file (incrementalRdbmsFile ));
267328 } catch (RdbmsValidationException | IOException ex ) {
@@ -270,8 +331,8 @@ private static void saveRdbms(RdbmsModel rdbmsModel, String dialect) {
270331
271332 }
272333
273- private static String getRdbmsFileName (final RdbmsModel rdbmsModel , String dialect ) {
274- return "test -" + dialect + "-" + rdbmsModel .getName () + "-rdbms.model" ;
334+ private static String getRdbmsFileName (String name , final RdbmsModel rdbmsModel , String dialect ) {
335+ return name + " -" + dialect + "-" + rdbmsModel .getName () + "-rdbms.model" ;
275336 }
276337
277338 private static void saveLiquibase (LiquibaseModel liquibaseModel , String dialect ) throws IOException {
0 commit comments