OpenImmo_1_2_5 extends XmlConverter<OpenImmoDocument, OpenImmoVersion> { protected void downgradeZustandElements(Document doc) throws JaxenException { List nodes = XmlUtils.newXPath( "/io:openimmo/io:anbieter/io:immobilie/io:zustand_angaben/io:zustand[@zustand_art]", doc).selectNodes(doc); for (Object item : nodes) { Element node = (Element) item; String value = StringUtils.trimToNull(node.getAttribute("zustand_art")); if ("TEIL_SANIERT".equalsIgnoreCase(value)) node.setAttribute("zustand_art", "TEIL_VOLLSANIERT"); else if ("VOLL_SANIERT".equalsIgnoreCase(value)) node.setAttribute("zustand_art", "TEIL_VOLLSANIERT"); else if ("SANIERUNGSBEDUERFTIG".equalsIgnoreCase(value)) node.removeAttribute("zustand_art"); } }  @Override OpenImmoVersion getVersion(); @Override void downgradeToPreviousVersion(OpenImmoDocument doc); @Override @SuppressWarnings("Duplicates") void upgradeFromPreviousVersion(OpenImmoDocument doc);  }
@Test public void testDowngradeZustandElements() { try { Document doc = buildTransferDocumentForDowngrade(); int count; count = XmlUtils.countNodes( "/io:openimmo/io:anbieter/io:immobilie/io:zustand_angaben/io:zustand[@zustand_art]", doc); Assert.assertEquals( "3 <zustand> elements available before conversion.", 3, count); count = XmlUtils.countNodes( "/io:openimmo/io:anbieter/io:immobilie/io:zustand_angaben/io:zustand[@zustand_art='TEIL_SANIERT' or @zustand_art='VOLL_SANIERT' or @zustand_art='SANIERUNGSBEDUERFTIG']", doc); Assert.assertEquals( "3 convertable <zustand> elements available before conversion.", 3, count); new OpenImmo_1_2_5().downgradeZustandElements(doc); count = XmlUtils.countNodes( "/io:openimmo/io:anbieter/io:immobilie/io:zustand_angaben/io:zustand[@zustand_art]", doc); Assert.assertEquals( "2 <zustand> elements available after conversion.", 2, count); count = XmlUtils.countNodes( "/io:openimmo/io:anbieter/io:immobilie/io:zustand_angaben/io:zustand[@zustand_art='TEIL_SANIERT' or @zustand_art='VOLL_SANIERT' or @zustand_art='SANIERUNGSBEDUERFTIG']", doc); Assert.assertEquals( "0 convertable <zustand> elements available after conversion.", 0, count); } catch (Exception ex) { LOGGER.error("Test of OpenImmo_1_2_5.downgradeZustandElements failed!"); LOGGER.error("> " + ex.getLocalizedMessage(), ex); Assert.fail("Test of OpenImmo_1_2_5.downgradeZustandElements failed!"); } }