]> git.basschouten.com Git - openhab-addons.git/commitdiff
[transform] Code optimization for Java17: instanceof matching and multiline strings...
authorHolger Friedrich <holgerfriedrich@users.noreply.github.com>
Thu, 24 Aug 2023 04:41:36 +0000 (06:41 +0200)
committerGitHub <noreply@github.com>
Thu, 24 Aug 2023 04:41:36 +0000 (06:41 +0200)
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
13 files changed:
bundles/org.openhab.transform.bin2json/src/main/java/org/openhab/transform/bin2json/internal/Bin2Json.java
bundles/org.openhab.transform.exec/src/main/java/org/openhab/transform/exec/internal/profiles/ExecTransformationProfile.java
bundles/org.openhab.transform.jinja/src/main/java/org/openhab/transform/jinja/internal/profiles/JinjaTransformationProfile.java
bundles/org.openhab.transform.jsonpath/src/main/java/org/openhab/transform/jsonpath/internal/JSonPathTransformationService.java
bundles/org.openhab.transform.jsonpath/src/main/java/org/openhab/transform/jsonpath/internal/profiles/JSonPathTransformationProfile.java
bundles/org.openhab.transform.map/src/main/java/org/openhab/transform/map/internal/profiles/MapTransformationProfile.java
bundles/org.openhab.transform.regex/src/main/java/org/openhab/transform/regex/internal/profiles/RegexTransformationProfile.java
bundles/org.openhab.transform.regex/src/test/java/org/openhab/transform/regex/internal/AbstractTransformationServiceTest.java
bundles/org.openhab.transform.scale/src/main/java/org/openhab/transform/scale/internal/profiles/ScaleTransformationProfile.java
bundles/org.openhab.transform.xpath/src/main/java/org/openhab/transform/xpath/internal/profiles/XPathTransformationProfile.java
bundles/org.openhab.transform.xpath/src/test/java/org/openhab/transform/xpath/internal/AbstractTransformationServiceTest.java
bundles/org.openhab.transform.xslt/src/main/java/org/openhab/transform/xslt/internal/profiles/XSLTTransformationProfile.java
bundles/org.openhab.transform.xslt/src/test/java/org/openhab/transform/xslt/internal/AbstractTransformationServiceTest.java

index a884f8367dd46c345109e03916f06723c9038ed3..3ccb76a832006a11cafb8f3dc71357e993574021 100644 (file)
@@ -161,41 +161,40 @@ public class Bin2Json {
         final String fieldName = field.getFieldName() == null ? "nonamed" : field.getFieldName();
         if (field instanceof JBBPAbstractArrayField) {
             final JsonArray jsonArray = new JsonArray();
-            if (field instanceof JBBPFieldArrayBit) {
-                for (final byte b : ((JBBPFieldArrayBit) field).getArray()) {
+            if (field instanceof JBBPFieldArrayBit bit) {
+                for (final byte b : bit.getArray()) {
                     jsonArray.add(new JsonPrimitive(b));
                 }
-            } else if (field instanceof JBBPFieldArrayBoolean) {
-                for (final boolean b : ((JBBPFieldArrayBoolean) field).getArray()) {
+            } else if (field instanceof JBBPFieldArrayBoolean boolean1) {
+                for (final boolean b : boolean1.getArray()) {
                     jsonArray.add(new JsonPrimitive(b));
                 }
-            } else if (field instanceof JBBPFieldArrayByte) {
-                for (final byte b : ((JBBPFieldArrayByte) field).getArray()) {
+            } else if (field instanceof JBBPFieldArrayByte byte1) {
+                for (final byte b : byte1.getArray()) {
                     jsonArray.add(new JsonPrimitive(b));
                 }
-            } else if (field instanceof JBBPFieldArrayInt) {
-                for (final int b : ((JBBPFieldArrayInt) field).getArray()) {
+            } else if (field instanceof JBBPFieldArrayInt int1) {
+                for (final int b : int1.getArray()) {
                     jsonArray.add(new JsonPrimitive(b));
                 }
-            } else if (field instanceof JBBPFieldArrayLong) {
-                for (final long b : ((JBBPFieldArrayLong) field).getArray()) {
+            } else if (field instanceof JBBPFieldArrayLong long1) {
+                for (final long b : long1.getArray()) {
                     jsonArray.add(new JsonPrimitive(b));
                 }
-            } else if (field instanceof JBBPFieldArrayShort) {
-                for (final short b : ((JBBPFieldArrayShort) field).getArray()) {
+            } else if (field instanceof JBBPFieldArrayShort short1) {
+                for (final short b : short1.getArray()) {
                     jsonArray.add(new JsonPrimitive(b));
                 }
-            } else if (field instanceof JBBPFieldArrayStruct) {
-                final JBBPFieldArrayStruct array = (JBBPFieldArrayStruct) field;
+            } else if (field instanceof JBBPFieldArrayStruct array) {
                 for (int i = 0; i < array.size(); i++) {
                     jsonArray.add(convertToJSon(new JsonObject(), array.getElementAt(i)));
                 }
-            } else if (field instanceof JBBPFieldArrayUByte) {
-                for (final byte b : ((JBBPFieldArrayUByte) field).getArray()) {
+            } else if (field instanceof JBBPFieldArrayUByte byte1) {
+                for (final byte b : byte1.getArray()) {
                     jsonArray.add(new JsonPrimitive(b & 0xFF));
                 }
-            } else if (field instanceof JBBPFieldArrayUShort) {
-                for (final short b : ((JBBPFieldArrayUShort) field).getArray()) {
+            } else if (field instanceof JBBPFieldArrayUShort short1) {
+                for (final short b : short1.getArray()) {
                     jsonArray.add(new JsonPrimitive(b & 0xFFFF));
                 }
             } else {
@@ -203,20 +202,19 @@ public class Bin2Json {
             }
             jsn.add(fieldName, jsonArray);
         } else {
-            if (field instanceof JBBPFieldBit) {
-                jsn.addProperty(fieldName, ((JBBPFieldBit) field).getAsInt());
-            } else if (field instanceof JBBPFieldBoolean) {
-                jsn.addProperty(fieldName, ((JBBPFieldBoolean) field).getAsBool());
-            } else if (field instanceof JBBPFieldByte) {
-                jsn.addProperty(fieldName, ((JBBPFieldByte) field).getAsInt());
-            } else if (field instanceof JBBPFieldInt) {
-                jsn.addProperty(fieldName, ((JBBPFieldInt) field).getAsInt());
-            } else if (field instanceof JBBPFieldLong) {
-                jsn.addProperty(fieldName, ((JBBPFieldLong) field).getAsLong());
-            } else if (field instanceof JBBPFieldShort) {
-                jsn.addProperty(fieldName, ((JBBPFieldShort) field).getAsInt());
-            } else if (field instanceof JBBPFieldStruct) {
-                final JBBPFieldStruct struct = (JBBPFieldStruct) field;
+            if (field instanceof JBBPFieldBit bit) {
+                jsn.addProperty(fieldName, bit.getAsInt());
+            } else if (field instanceof JBBPFieldBoolean boolean1) {
+                jsn.addProperty(fieldName, boolean1.getAsBool());
+            } else if (field instanceof JBBPFieldByte byte1) {
+                jsn.addProperty(fieldName, byte1.getAsInt());
+            } else if (field instanceof JBBPFieldInt int1) {
+                jsn.addProperty(fieldName, int1.getAsInt());
+            } else if (field instanceof JBBPFieldLong long1) {
+                jsn.addProperty(fieldName, long1.getAsLong());
+            } else if (field instanceof JBBPFieldShort short1) {
+                jsn.addProperty(fieldName, short1.getAsInt());
+            } else if (field instanceof JBBPFieldStruct struct) {
                 final JsonObject obj = new JsonObject();
                 for (final JBBPAbstractField f : struct.getArray()) {
                     convertToJSon(obj, f);
@@ -226,10 +224,10 @@ public class Bin2Json {
                 } else {
                     jsn.add(fieldName, obj);
                 }
-            } else if (field instanceof JBBPFieldUByte) {
-                jsn.addProperty(fieldName, ((JBBPFieldUByte) field).getAsInt());
-            } else if (field instanceof JBBPFieldUShort) {
-                jsn.addProperty(fieldName, ((JBBPFieldUShort) field).getAsInt());
+            } else if (field instanceof JBBPFieldUByte byte1) {
+                jsn.addProperty(fieldName, byte1.getAsInt());
+            } else if (field instanceof JBBPFieldUShort short1) {
+                jsn.addProperty(fieldName, short1.getAsInt());
             } else {
                 throw new ConversionException(String.format("Unexpected field '%s'", field));
             }
index 92ac8d60c13591f426ed0671898d01035690ef5b..ae42266f54fa2394ee22906387cd9d9bd7d95002 100644 (file)
@@ -64,9 +64,9 @@ public class ExecTransformationProfile implements StateProfile {
         if (paramSource == null) {
             paramSource = "%s";
         }
-        if (paramFunction instanceof String && paramSource instanceof String) {
-            function = (String) paramFunction;
-            sourceFormat = (String) paramSource;
+        if (paramFunction instanceof String pFunction && paramSource instanceof String pFormat) {
+            function = pFunction;
+            sourceFormat = pFormat;
         } else {
             logger.error("Parameter '{}' and '{}' have to be Strings. Profile will be inactive.", FUNCTION_PARAM,
                     SOURCE_FORMAT_PARAM);
index c8f4cdc3c7bf28d0c0141a83d5a365ae5ffdb25a..b6f4618e003dbdfb24fca1f4ce5cb1c38b1bfc5f 100644 (file)
@@ -65,9 +65,9 @@ public class JinjaTransformationProfile implements StateProfile {
         if (paramSource == null) {
             paramSource = "%s";
         }
-        if (paramFunction instanceof String && paramSource instanceof String) {
-            function = (String) paramFunction;
-            sourceFormat = (String) paramSource;
+        if (paramFunction instanceof String pFunction && paramSource instanceof String pFormat) {
+            function = pFunction;
+            sourceFormat = pFormat;
         } else {
             logger.error("Parameter '{}' and '{}' have to be Strings. Profile will be inactive.", FUNCTION_PARAM,
                     SOURCE_FORMAT_PARAM);
index a38bf65032464b5c9ce25b470ab3966af312253f..a54896a506c846f9a00f523a35f94ad316036762 100644 (file)
@@ -68,8 +68,8 @@ public class JSonPathTransformationService implements TransformationService {
             logger.debug("transformation resulted in '{}'", transformationResult);
             if (transformationResult == null) {
                 return null;
-            } else if (transformationResult instanceof List) {
-                return flattenList((List<?>) transformationResult);
+            } else if (transformationResult instanceof List list) {
+                return flattenList(list);
             } else {
                 return transformationResult.toString();
             }
index b343e352e103959bb921b15cb349b2cc068acd1e..a02a6e8ae41a1e11707ffffd89062345dfd7119c 100644 (file)
@@ -66,9 +66,9 @@ public class JSonPathTransformationProfile implements StateProfile {
         if (paramSource == null) {
             paramSource = "%s";
         }
-        if (paramFunction instanceof String && paramSource instanceof String) {
-            function = (String) paramFunction;
-            sourceFormat = (String) paramSource;
+        if (paramFunction instanceof String pFunction && paramSource instanceof String pFormat) {
+            function = pFunction;
+            sourceFormat = pFormat;
         } else {
             logger.error("Parameter '{}' and '{}' have to be Strings. Profile will be inactive.", FUNCTION_PARAM,
                     SOURCE_FORMAT_PARAM);
index f57abec1db3a8d79e253443d33cfa5ae4d2afd17..d2a15afc28598a6530bca60fe1a21fe72acc2873 100644 (file)
@@ -64,9 +64,9 @@ public class MapTransformationProfile implements StateProfile {
         if (paramSource == null) {
             paramSource = "%s";
         }
-        if (paramFunction instanceof String && paramSource instanceof String) {
-            function = (String) paramFunction;
-            sourceFormat = (String) paramSource;
+        if (paramFunction instanceof String pFunction && paramSource instanceof String pFormat) {
+            function = pFunction;
+            sourceFormat = pFormat;
         } else {
             logger.error("Parameter '{}' and '{}' have to be Strings. Profile will be inactive.", FUNCTION_PARAM,
                     SOURCE_FORMAT_PARAM);
index 3f3693c56b5158439bcb6f9aee743922a405456a..e32567940119b819ec4fd6e7e7f195699cdb6ee3 100644 (file)
@@ -65,9 +65,9 @@ public class RegexTransformationProfile implements StateProfile {
         if (paramSource == null) {
             paramSource = "%s";
         }
-        if (paramFunction instanceof String && paramSource instanceof String) {
-            function = (String) paramFunction;
-            sourceFormat = (String) paramSource;
+        if (paramFunction instanceof String pFunction && paramSource instanceof String pFormat) {
+            function = pFunction;
+            sourceFormat = pFormat;
         } else {
             logger.error("Parameter '{}' and '{}' have to be Strings. Profile will be inactive.", FUNCTION_PARAM,
                     SOURCE_FORMAT_PARAM);
index 222e0d550817be044d33a93a178ad1a16a180672..f1c9c821696494947166ca3bc2b139ac7ad78246 100644 (file)
@@ -17,19 +17,21 @@ package org.openhab.transform.regex.internal;
  */
 public abstract class AbstractTransformationServiceTest {
 
-    protected String source = "<?xml version=\"1.0\"?><xml_api_reply version=\"1\"><weather module_id=\"0\""
-            + " tab_id=\"0\" mobile_row=\"0\" mobile_zipped=\"1\" row=\"0\" section=\"0\" ><forecast_information>"
-            + "<city data=\"Krefeld, North Rhine-Westphalia\"/><postal_code data=\"Krefeld Germany\"/>"
-            + "<latitude_e6 data=\"\"/><longitude_e6 data=\"\"/><forecast_date data=\"2011-03-01\"/>"
-            + "<current_date_time data=\"2011-03-01 15:20:00 +0000\"/><unit_system data=\"SI\"/></forecast_information>"
-            + "<current_conditions><condition data=\"Meistens bew�lkt\"/><temp_f data=\"46\"/><temp_c data=\"8\"/>"
-            + "<humidity data=\"Feuchtigkeit: 66 %\"/><icon data=\"/ig/images/weather/mostly_cloudy.gif\"/>"
-            + "<wind_condition data=\"Wind: N mit 26 km/h\"/></current_conditions><forecast_conditions><day_of_week data=\"Di.\"/>"
-            + "<low data=\"-1\"/><high data=\"6\"/><icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/>"
-            + "</forecast_conditions><forecast_conditions><day_of_week data=\"Mi.\"/><low data=\"-1\"/><high data=\"8\"/>"
-            + "<icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/></forecast_conditions><forecast_conditions>"
-            + "<day_of_week data=\"Do.\"/><low data=\"-1\"/><high data=\"8\"/><icon data=\"/ig/images/weather/sunny.gif\"/>"
-            + "<condition data=\"Klar\"/></forecast_conditions><forecast_conditions><day_of_week data=\"Fr.\"/><low data=\"0\"/>"
-            + "<high data=\"8\"/><icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/></forecast_conditions>"
-            + "</weather></xml_api_reply>";
+    protected String source = """
+            <?xml version="1.0"?><xml_api_reply version="1"><weather module_id="0"\
+             tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" ><forecast_information>\
+            <city data="Krefeld, North Rhine-Westphalia"/><postal_code data="Krefeld Germany"/>\
+            <latitude_e6 data=""/><longitude_e6 data=""/><forecast_date data="2011-03-01"/>\
+            <current_date_time data="2011-03-01 15:20:00 +0000"/><unit_system data="SI"/></forecast_information>\
+            <current_conditions><condition data="Meistens bew�lkt"/><temp_f data="46"/><temp_c data="8"/>\
+            <humidity data="Feuchtigkeit: 66 %"/><icon data="/ig/images/weather/mostly_cloudy.gif"/>\
+            <wind_condition data="Wind: N mit 26 km/h"/></current_conditions><forecast_conditions><day_of_week data="Di."/>\
+            <low data="-1"/><high data="6"/><icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/>\
+            </forecast_conditions><forecast_conditions><day_of_week data="Mi."/><low data="-1"/><high data="8"/>\
+            <icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/></forecast_conditions><forecast_conditions>\
+            <day_of_week data="Do."/><low data="-1"/><high data="8"/><icon data="/ig/images/weather/sunny.gif"/>\
+            <condition data="Klar"/></forecast_conditions><forecast_conditions><day_of_week data="Fr."/><low data="0"/>\
+            <high data="8"/><icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/></forecast_conditions>\
+            </weather></xml_api_reply>\
+            """;
 }
index fcce627e81b792e8f83a4ab1bafcc00ba7472e7a..1499f1e2b5c004e84c89ae04b4d0d7bd19d7a243 100644 (file)
@@ -64,9 +64,9 @@ public class ScaleTransformationProfile implements StateProfile {
         if (paramSource == null) {
             paramSource = "%s";
         }
-        if (paramFunction instanceof String && paramSource instanceof String) {
-            function = (String) paramFunction;
-            sourceFormat = (String) paramSource;
+        if (paramFunction instanceof String pFunction && paramSource instanceof String pFormat) {
+            function = pFunction;
+            sourceFormat = pFormat;
         } else {
             logger.error("Parameter '{}' and '{}' have to be Strings. Profile will be inactive.", FUNCTION_PARAM,
                     SOURCE_FORMAT_PARAM);
index 9661b36b4cf45e446bfe5ce0f164b390d51357b3..97e498c428503958a9650137043d54ea7d80afc9 100644 (file)
@@ -65,9 +65,9 @@ public class XPathTransformationProfile implements StateProfile {
         if (paramSource == null) {
             paramSource = "%s";
         }
-        if (paramFunction instanceof String && paramSource instanceof String) {
-            function = (String) paramFunction;
-            sourceFormat = (String) paramSource;
+        if (paramFunction instanceof String pFunction && paramSource instanceof String pFormat) {
+            function = pFunction;
+            sourceFormat = pFormat;
         } else {
             logger.error("Parameter '{}' and '{}' have to be Strings. Profile will be inactive.", FUNCTION_PARAM,
                     SOURCE_FORMAT_PARAM);
index 531ede33b867e221f0c21c90850b9caa677dcb70..0ee067cee49a0c818051ae973d477f73370adc6c 100644 (file)
@@ -17,19 +17,21 @@ package org.openhab.transform.xpath.internal;
  */
 public abstract class AbstractTransformationServiceTest {
 
-    protected String source = "<?xml version=\"1.0\"?><xml_api_reply version=\"1\"><weather module_id=\"0\""
-            + " tab_id=\"0\" mobile_row=\"0\" mobile_zipped=\"1\" row=\"0\" section=\"0\" ><forecast_information>"
-            + "<city data=\"Krefeld, North Rhine-Westphalia\"/><postal_code data=\"Krefeld Germany\"/>"
-            + "<latitude_e6 data=\"\"/><longitude_e6 data=\"\"/><forecast_date data=\"2011-03-01\"/>"
-            + "<current_date_time data=\"2011-03-01 15:20:00 +0000\"/><unit_system data=\"SI\"/></forecast_information>"
-            + "<current_conditions><condition data=\"Meistens bew�lkt\"/><temp_f data=\"46\"/><temp_c data=\"8\"/>"
-            + "<humidity data=\"Feuchtigkeit: 66 %\"/><icon data=\"/ig/images/weather/mostly_cloudy.gif\"/>"
-            + "<wind_condition data=\"Wind: N mit 26 km/h\"/></current_conditions><forecast_conditions><day_of_week data=\"Di.\"/>"
-            + "<low data=\"-1\"/><high data=\"6\"/><icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/>"
-            + "</forecast_conditions><forecast_conditions><day_of_week data=\"Mi.\"/><low data=\"-1\"/><high data=\"8\"/>"
-            + "<icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/></forecast_conditions><forecast_conditions>"
-            + "<day_of_week data=\"Do.\"/><low data=\"-1\"/><high data=\"8\"/><icon data=\"/ig/images/weather/sunny.gif\"/>"
-            + "<condition data=\"Klar\"/></forecast_conditions><forecast_conditions><day_of_week data=\"Fr.\"/><low data=\"0\"/>"
-            + "<high data=\"8\"/><icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/></forecast_conditions>"
-            + "</weather></xml_api_reply>";
+    protected String source = """
+            <?xml version="1.0"?><xml_api_reply version="1"><weather module_id="0"\
+             tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" ><forecast_information>\
+            <city data="Krefeld, North Rhine-Westphalia"/><postal_code data="Krefeld Germany"/>\
+            <latitude_e6 data=""/><longitude_e6 data=""/><forecast_date data="2011-03-01"/>\
+            <current_date_time data="2011-03-01 15:20:00 +0000"/><unit_system data="SI"/></forecast_information>\
+            <current_conditions><condition data="Meistens bew�lkt"/><temp_f data="46"/><temp_c data="8"/>\
+            <humidity data="Feuchtigkeit: 66 %"/><icon data="/ig/images/weather/mostly_cloudy.gif"/>\
+            <wind_condition data="Wind: N mit 26 km/h"/></current_conditions><forecast_conditions><day_of_week data="Di."/>\
+            <low data="-1"/><high data="6"/><icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/>\
+            </forecast_conditions><forecast_conditions><day_of_week data="Mi."/><low data="-1"/><high data="8"/>\
+            <icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/></forecast_conditions><forecast_conditions>\
+            <day_of_week data="Do."/><low data="-1"/><high data="8"/><icon data="/ig/images/weather/sunny.gif"/>\
+            <condition data="Klar"/></forecast_conditions><forecast_conditions><day_of_week data="Fr."/><low data="0"/>\
+            <high data="8"/><icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/></forecast_conditions>\
+            </weather></xml_api_reply>\
+            """;
 }
index b585b99b72a1fa86a4fa782c81d2c047a0c81020..73c388d99674e0254baf14286670399eeff34774 100644 (file)
@@ -65,9 +65,9 @@ public class XSLTTransformationProfile implements StateProfile {
         if (paramSource == null) {
             paramSource = "%s";
         }
-        if (paramFunction instanceof String && paramSource instanceof String) {
-            function = (String) paramFunction;
-            sourceFormat = (String) paramSource;
+        if (paramFunction instanceof String pFunction && paramSource instanceof String pFormat) {
+            function = pFunction;
+            sourceFormat = pFormat;
         } else {
             logger.warn("Parameter '{}' and '{}' have to be Strings. Profile will be inactive.", FUNCTION_PARAM,
                     SOURCE_FORMAT_PARAM);
index 8edb7e070c2a829b8056fa382b01a1f39124a563..d6bbe238d7d98f5aaace96dd5ccc2e5a0484b0ba 100644 (file)
@@ -17,19 +17,21 @@ package org.openhab.transform.xslt.internal;
  */
 public abstract class AbstractTransformationServiceTest {
 
-    protected String source = "<?xml version=\"1.0\"?><xml_api_reply version=\"1\"><weather module_id=\"0\""
-            + " tab_id=\"0\" mobile_row=\"0\" mobile_zipped=\"1\" row=\"0\" section=\"0\" ><forecast_information>"
-            + "<city data=\"Krefeld, North Rhine-Westphalia\"/><postal_code data=\"Krefeld Germany\"/>"
-            + "<latitude_e6 data=\"\"/><longitude_e6 data=\"\"/><forecast_date data=\"2011-03-01\"/>"
-            + "<current_date_time data=\"2011-03-01 15:20:00 +0000\"/><unit_system data=\"SI\"/></forecast_information>"
-            + "<current_conditions><condition data=\"Meistens bew�lkt\"/><temp_f data=\"46\"/><temp_c data=\"8\"/>"
-            + "<humidity data=\"Feuchtigkeit: 66 %\"/><icon data=\"/ig/images/weather/mostly_cloudy.gif\"/>"
-            + "<wind_condition data=\"Wind: N mit 26 km/h\"/></current_conditions><forecast_conditions><day_of_week data=\"Di.\"/>"
-            + "<low data=\"-1\"/><high data=\"6\"/><icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/>"
-            + "</forecast_conditions><forecast_conditions><day_of_week data=\"Mi.\"/><low data=\"-1\"/><high data=\"8\"/>"
-            + "<icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/></forecast_conditions><forecast_conditions>"
-            + "<day_of_week data=\"Do.\"/><low data=\"-1\"/><high data=\"8\"/><icon data=\"/ig/images/weather/sunny.gif\"/>"
-            + "<condition data=\"Klar\"/></forecast_conditions><forecast_conditions><day_of_week data=\"Fr.\"/><low data=\"0\"/>"
-            + "<high data=\"8\"/><icon data=\"/ig/images/weather/sunny.gif\"/><condition data=\"Klar\"/></forecast_conditions>"
-            + "</weather></xml_api_reply>";
+    protected String source = """
+            <?xml version="1.0"?><xml_api_reply version="1"><weather module_id="0"\
+             tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" ><forecast_information>\
+            <city data="Krefeld, North Rhine-Westphalia"/><postal_code data="Krefeld Germany"/>\
+            <latitude_e6 data=""/><longitude_e6 data=""/><forecast_date data="2011-03-01"/>\
+            <current_date_time data="2011-03-01 15:20:00 +0000"/><unit_system data="SI"/></forecast_information>\
+            <current_conditions><condition data="Meistens bew�lkt"/><temp_f data="46"/><temp_c data="8"/>\
+            <humidity data="Feuchtigkeit: 66 %"/><icon data="/ig/images/weather/mostly_cloudy.gif"/>\
+            <wind_condition data="Wind: N mit 26 km/h"/></current_conditions><forecast_conditions><day_of_week data="Di."/>\
+            <low data="-1"/><high data="6"/><icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/>\
+            </forecast_conditions><forecast_conditions><day_of_week data="Mi."/><low data="-1"/><high data="8"/>\
+            <icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/></forecast_conditions><forecast_conditions>\
+            <day_of_week data="Do."/><low data="-1"/><high data="8"/><icon data="/ig/images/weather/sunny.gif"/>\
+            <condition data="Klar"/></forecast_conditions><forecast_conditions><day_of_week data="Fr."/><low data="0"/>\
+            <high data="8"/><icon data="/ig/images/weather/sunny.gif"/><condition data="Klar"/></forecast_conditions>\
+            </weather></xml_api_reply>\
+            """;
 }