Skip to content

Commit a7966b1

Browse files
committed
HBX-3249: Refactor class MappingExporter and improve tests
- Add method 'transformBindings' and add a test method for it - Complete the 'start' method to perform the transformation logic - Enable 'testStart' and complete the test method Signed-off-by: Koen Aers <koen.aers@gmail.com>
1 parent 0dc5cf2 commit a7966b1

File tree

2 files changed

+83
-15
lines changed

2 files changed

+83
-15
lines changed

orm/src/main/java/org/hibernate/tool/internal/export/mapping/MappingExporter.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,22 @@ public Properties getProperties() {
5858
@Override
5959
public void start() {
6060
List<Binding<JaxbHbmHibernateMapping>> hbmBindings = getHbmBindings();
61+
List<Binding<JaxbEntityMappingsImpl>> transformedBindings = transformBindings(hbmBindings);
62+
for (int i = 0; i < hbmBindings.size(); i++) {
63+
marshall(
64+
transformedBindings.get(i).getRoot(),
65+
((HbmXmlOrigin)hbmBindings.get(i).getOrigin()).getHbmXmlFile());
66+
}
67+
}
68+
69+
private List<Binding<JaxbEntityMappingsImpl>> transformBindings(
70+
List<Binding<JaxbHbmHibernateMapping>> hbmBindings) {
6171
MetadataSources metadataSources = new MetadataSources( createServiceRegistry() );
6272
hbmBindings.forEach( metadataSources::addHbmXmlBinding );
63-
List<Binding<JaxbEntityMappingsImpl>> transformedBindings = HbmXmlTransformer.transform(
73+
return HbmXmlTransformer.transform(
6474
hbmBindings,
6575
(MetadataImplementor) metadataSources.buildMetadata(),
66-
UnsupportedFeatureHandling.ERROR
67-
);
68-
for (int i = 0; i < hbmBindings.size(); i++) {
69-
Binding<JaxbHbmHibernateMapping> hbmBinding = hbmBindings.get( i );
70-
Binding<JaxbEntityMappingsImpl> transformedBinding = transformedBindings.get( i );
71-
HbmXmlOrigin origin = (HbmXmlOrigin)hbmBinding.getOrigin();
72-
marshall(transformedBinding.getRoot(), origin.getHbmXmlFile());
73-
}
76+
UnsupportedFeatureHandling.ERROR);
7477
}
7578

7679
private ServiceRegistry createServiceRegistry() {

orm/src/test/java/org/hibernate/tool/internal/export/mapping/MappingExporterTest.java

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import jakarta.xml.bind.Unmarshaller;
66
import org.apache.commons.collections4.list.UnmodifiableList;
77
import org.hibernate.boot.jaxb.Origin;
8+
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping;
9+
import org.hibernate.boot.jaxb.hbm.transform.UnsupportedFeatureHandling;
810
import org.hibernate.boot.jaxb.internal.MappingBinder;
911
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
1012
import org.hibernate.boot.jaxb.spi.Binding;
@@ -14,11 +16,11 @@
1416
import org.hibernate.service.ServiceRegistry;
1517
import org.hibernate.tool.internal.util.DummyDialect;
1618
import org.junit.jupiter.api.BeforeEach;
17-
import org.junit.jupiter.api.Disabled;
1819
import org.junit.jupiter.api.Test;
1920
import org.junit.jupiter.api.io.TempDir;
2021

2122
import java.io.File;
23+
import java.io.FileInputStream;
2224
import java.io.InputStream;
2325
import java.lang.reflect.*;
2426
import java.nio.file.Files;
@@ -174,14 +176,67 @@ public void testMarshall() throws Exception {
174176
marshallMethod.invoke(mappingExporter, null, hbmFile);
175177
lines = Files.readAllLines(mappingFile.toPath());
176178
assertEquals(4, lines.size());
179+
Field formatResultField = MappingExporter.class.getDeclaredField("formatResult");
180+
formatResultField.setAccessible(true);
181+
formatResultField.set(mappingExporter, false);
182+
Files.writeString(mappingFile.toPath(), "<foo><bar>foobar</bar></foo>");
183+
lines = Files.readAllLines(mappingFile.toPath());
184+
assertEquals(1, lines.size());
185+
marshallMethod.invoke(mappingExporter, null, hbmFile);
186+
lines = Files.readAllLines(mappingFile.toPath());
187+
assertEquals(1, lines.size());
188+
}
189+
190+
@Test
191+
public void testTransformBindings() throws Exception {
192+
File simpleHbmXmlFile = new File(this.tempDir, "simple.hbm.xml");
193+
Files.writeString(simpleHbmXmlFile.toPath(), SIMPLE_HBM_XML);
194+
MappingBinder mappingBinder = new MappingBinder(
195+
MappingBinder.class.getClassLoader()::getResourceAsStream,
196+
UnsupportedFeatureHandling.ERROR);
197+
Binding<JaxbHbmHibernateMapping> hbmBinding = mappingBinder.bind(
198+
new FileInputStream(simpleHbmXmlFile),
199+
new HbmXmlOrigin(simpleHbmXmlFile));
200+
List<Binding<JaxbHbmHibernateMapping>> bindings = new ArrayList<>();
201+
bindings.add(hbmBinding);
202+
Method transformBindingsMethod = MappingExporter.class.getDeclaredMethod(
203+
"transformBindings",
204+
List.class);
205+
assertNotNull(transformBindingsMethod);
206+
transformBindingsMethod.setAccessible(true);
207+
List<?> transformedBindings = (List<?>)transformBindingsMethod.invoke(mappingExporter, bindings);
208+
assertNotNull(transformedBindings);
209+
assertEquals(1, transformedBindings.size());
210+
Object object = transformedBindings.get(0);
211+
assertInstanceOf(Binding.class, object);
212+
Binding<?> entityBinding = (Binding<?>)object;
213+
Origin origin = entityBinding.getOrigin();
214+
assertInstanceOf(HbmXmlOrigin.class, origin);
215+
assertSame(simpleHbmXmlFile, ((HbmXmlOrigin)origin).getHbmXmlFile());
216+
Object root = entityBinding.getRoot();
217+
assertInstanceOf(JaxbEntityMappingsImpl.class, root);
218+
JaxbEntityMappingsImpl entityMappings = (JaxbEntityMappingsImpl)root;
219+
assertEquals(1, entityMappings.getEntities().size());
220+
assertEquals("Foo", entityMappings.getEntities().get(0).getClazz());
177221
}
178222

179-
@Disabled
180223
@Test
181-
public void testStart() {
182-
MappingExporter exporter = new MappingExporter();
183-
assertNotNull(exporter);
184-
exporter.start();
224+
public void testStart() throws Exception {
225+
File simpleHbmXmlFile = new File(this.tempDir, "simple.hbm.xml");
226+
File simpleMappingXmlFile = new File(this.tempDir, "simple.mapping.xml");
227+
Files.writeString(simpleHbmXmlFile.toPath(), SIMPLE_HBM_XML);
228+
Field hbmFilesField = MappingExporter.class.getDeclaredField("hbmXmlFiles");
229+
hbmFilesField.setAccessible(true);
230+
hbmFilesField.set(
231+
mappingExporter,
232+
new UnmodifiableList<>(List.of(simpleHbmXmlFile)));
233+
assertTrue(simpleHbmXmlFile.exists());
234+
assertFalse(simpleMappingXmlFile.exists());
235+
mappingExporter.start();
236+
assertTrue(simpleMappingXmlFile.exists());
237+
String mappingXml = Files.readString(simpleMappingXmlFile.toPath());
238+
assertTrue(mappingXml.contains("entity-mappings"));
239+
System.out.println(mappingXml);
185240
}
186241

187242
private static final Marshaller DUMMY_MARSHALLER = (Marshaller) Proxy.newProxyInstance(
@@ -225,4 +280,14 @@ public Marshaller createMarshaller() {
225280
}
226281
}
227282

283+
private static final String SIMPLE_HBM_XML =
284+
"""
285+
<hibernate-mapping>
286+
<class name="Foo">
287+
<id name="id" type="long"/>
288+
<property name="name" type="string"/>
289+
</class>
290+
</hibernate-mapping>
291+
""";
292+
228293
}

0 commit comments

Comments
 (0)