OpenImmo_1_2_3 extends XmlConverter<OpenImmoDocument, OpenImmoVersion> { protected void upgradeZinshausRenditeobjektElements(Document doc) throws JaxenException { List nodes = XmlUtils.newXPath( "/io:openimmo/io:anbieter/io:immobilie/io:objektkategorie/io:objektart/io:haus[@haustyp]", doc).selectNodes(doc); for (Object item : nodes) { Element node = (Element) item; Element parent = (Element) node.getParentNode(); String value = StringUtils.trimToNull(node.getAttribute("haustyp")); if ("PFLEGEHEIM".equalsIgnoreCase(value)) { parent.removeChild(node); Element newNode = doc.createElementNS(StringUtils.EMPTY, "zinshaus_renditeobjekt"); newNode.setAttribute("zins_typ", "PFLEGEHEIM"); parent.appendChild(newNode); } else if ("SANATORIUM".equalsIgnoreCase(value)) { parent.removeChild(node); Element newNode = doc.createElementNS(StringUtils.EMPTY, "zinshaus_renditeobjekt"); newNode.setAttribute("zins_typ", "SANATORIUM"); parent.appendChild(newNode); } else if ("SENIORENHEIM".equalsIgnoreCase(value)) { parent.removeChild(node); Element newNode = doc.createElementNS(StringUtils.EMPTY, "zinshaus_renditeobjekt"); newNode.setAttribute("zins_typ", "SENIORENHEIM"); parent.appendChild(newNode); } else if ("BETREUTES-WOHNEN".equalsIgnoreCase(value)) { parent.removeChild(node); Element newNode = doc.createElementNS(StringUtils.EMPTY, "zinshaus_renditeobjekt"); newNode.setAttribute("zins_typ", "BETREUTES-WOHNEN"); parent.appendChild(newNode); } } }  @Override OpenImmoVersion getVersion(); @Override void downgradeToPreviousVersion(OpenImmoDocument doc); @Override void upgradeFromPreviousVersion(OpenImmoDocument doc);  }
@Test public void testUpgradeZinshausRenditeobjektElements() { try { Document doc = buildTransferDocumentForUpgrade(); int count; count = XmlUtils.countNodes( "/io:openimmo/io:anbieter/io:immobilie/io:objektkategorie/io:objektart/io:haus[@haustyp='PFLEGEHEIM' or @haustyp='SANATORIUM' or @haustyp='SENIORENHEIM' or @haustyp='BETREUTES-WOHNEN']", doc); Assert.assertEquals( "4 convertable <haus> elements available before conversion.", 4, count); new OpenImmo_1_2_3().upgradeZinshausRenditeobjektElements(doc); count = XmlUtils.countNodes( "/io:openimmo/io:anbieter/io:immobilie/io:objektkategorie/io:objektart/io:haus[@haustyp='PFLEGEHEIM' or @haustyp='SANATORIUM' or @haustyp='SENIORENHEIM' or @haustyp='BETREUTES-WOHNEN']", doc); Assert.assertEquals( "0 convertable <wintergarten> elements available after conversion.", 0, count); count = XmlUtils.countNodes( "/io:openimmo/io:anbieter/io:immobilie/io:objektkategorie/io:objektart/io:zinshaus_renditeobjekt[@zins_typ='PFLEGEHEIM' or @zins_typ='SANATORIUM' or @zins_typ='SENIORENHEIM' or @zins_typ='BETREUTES-WOHNEN']", doc); Assert.assertEquals( "4 converted <zinshaus_renditeobjekt> elements available after conversion.", 4, count); } catch (Exception ex) { LOGGER.error("Test of OpenImmo_1_2_3.upgradeZinshausRenditeobjektElements failed!"); LOGGER.error("> " + ex.getLocalizedMessage(), ex); Assert.fail("Test of OpenImmo_1_2_3.upgradeZinshausRenditeobjektElements failed!"); } }