Example usage for org.xml.sax InputSource setCharacterStream

List of usage examples for org.xml.sax InputSource setCharacterStream

Introduction

In this page you can find the example usage for org.xml.sax InputSource setCharacterStream.

Prototype

public void setCharacterStream(Reader characterStream) 

Source Link

Document

Set the character stream for this input source.

Usage

From source file:org.eclipse.lyo.testsuite.server.util.OSLCUtils.java

public static Document createXMLDocFromResponseBody(String respBody)
        throws ParserConfigurationException, IOException, SAXException {
    //Create XML Doc out of response
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);/*from   ww w .j av a  2  s .c o  m*/
    dbf.setValidating(false);
    // Don't load external DTD
    dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(respBody));
    return db.parse(is);
}

From source file:com.esri.geoevent.solutions.adapter.cot.CoTUtilities.java

public static ArrayList<CoTTypeDef> getCoTTypeMap(InputStream mapInputStream)
        throws ParserConfigurationException, SAXException, IOException {

    ArrayList<CoTTypeDef> types = null;

    String content = getStringFromFile(mapInputStream);

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource source = new InputSource();
    source.setCharacterStream(new StringReader(content));
    Document doc = db.parse(source);
    NodeList nodeList = doc.getElementsByTagName("types");
    types = typeBreakdown(nodeList.item(0));
    return types;
}

From source file:com.runwaysdk.browser.JavascriptTestRunner.java

public static Test suite() throws Exception {
    // Read project.version
    Properties prop1 = new Properties();
    ClassLoader loader1 = Thread.currentThread().getContextClassLoader();
    InputStream stream1 = loader1.getResourceAsStream("avail-maven.properties");
    prop1.load(stream1);/*ww w .  ja v  a 2  s. c  om*/
    String projVer = prop1.getProperty("mvn.project.version");

    TestSuite suite = new TestSuite();

    int browserLoopIterationNumber = 0;

    System.out.println("Preparing to run cross-browser javascript unit tests.");
    long totalTime = System.currentTimeMillis();

    for (String browser : supportedBrowsers) {
        try {
            String browserDisplayName = String.valueOf(browser.charAt(1)).toUpperCase() + browser.substring(2);
            System.out.println("Opening " + browserDisplayName);

            TestSuite browserSuite = new TestSuite(browserDisplayName);

            selenium = new DefaultSelenium("localhost", 4444, browser,
                    "http://localhost:8080/runwaysdk-browser-test-" + projVer + "/");
            selenium.start();
            isSeleniumStarted = true;
            selenium.open("MasterTestLauncher.jsp");

            //          selenium.waitForCondition("selenium.browserbot.getCurrentWindow().document.getElementById('all');", "6000");

            selenium.setTimeout("1000");

            System.out.println("Running tests...");
            long time = System.currentTimeMillis();

            selenium.click("all");
            selenium.waitForCondition(
                    "!selenium.browserbot.getCurrentWindow().com.runwaysdk.test.TestFramework.getY().Test.Runner.isRunning()",
                    Integer.toString(MAXIMUM_TOTAL_TEST_DURATION * 1000));

            time = System.currentTimeMillis() - time; // elapsed time in milis
            if (time < 1000) {
                System.out.println("Tests completed in " + time + " miliseconds.");
            } else if (time < 60000) {
                time = time / 1000;
                System.out.println("Tests completed in " + time + " seconds.");
            } else if (time < 3600000) {
                time = time / (1000 * 60);
                System.out.println("Tests completed in " + time + " minutes.");
            } else {
                time = time / (1000 * 60 * 60);
                System.out.println("Tests completed in " + time + " hours.");
            }

            //System.out.println(selenium.getEval("\n\n" + "selenium.browserbot.getCurrentWindow().com.runwaysdk.test.TestFramework.getY().Test.Runner.getResults(selenium.browserbot.getCurrentWindow().com.runwaysdk.test.TestFramework.getY().Test.Format.XML);") + "\n\n");

            // tests are done running, get the results and display them through junit

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();

            String resultsJunitXML = selenium.getEval(
                    "selenium.browserbot.getCurrentWindow().com.runwaysdk.test.TestFramework.getY().Test.Runner.getResults(selenium.browserbot.getCurrentWindow().com.runwaysdk.test.TestFramework.getY().Test.Format.JUnitXML);");
            String resultsYUITestXML = selenium.getEval(
                    "selenium.browserbot.getCurrentWindow().com.runwaysdk.test.TestFramework.getY().Test.Runner.getResults(selenium.browserbot.getCurrentWindow().com.runwaysdk.test.TestFramework.getY().Test.Format.XML);");

            // Write the test output to xml
            Properties prop = new Properties();
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            InputStream stream = loader.getResourceAsStream("default/common/terraframe.properties");
            prop.load(stream);
            String basedir = prop.getProperty("local.root");

            System.out.println("Writing javascript test results to '" + basedir
                    + "/target/surefire-reports/TEST-com.runwaysdk.browser.JavascriptTestRunner-"
                    + browserDisplayName + ".xml.");
            File dir = new File(basedir + "/target/surefire-reports");
            dir.mkdirs();
            final OutputStream os = new FileOutputStream(dir.getAbsolutePath()
                    + "/TEST-com.runwaysdk.browser.JavascriptTestRunner-" + browserDisplayName + ".xml", false);
            final PrintStream printStream = new PrintStream(os);
            printStream.print(resultsJunitXML);
            printStream.close();

            InputSource in = new InputSource();
            in.setCharacterStream(new StringReader(resultsYUITestXML));
            Element doc = db.parse(in).getDocumentElement();

            NodeList suiteList = doc.getElementsByTagName("testsuite");

            if (suiteList == null || suiteList.getLength() == 0) {
                //suiteList = (NodeList)doc;
                throw new Exception("Unable to find any suites!");
            }

            String uniqueWhitespace = "";
            for (int j = 0; j < browserLoopIterationNumber; j++) {
                uniqueWhitespace = uniqueWhitespace + " ";
            }

            for (int i = 0; i < suiteList.getLength(); i++) //looping through test suites
            {
                Node n = suiteList.item(i);
                TestSuite s = new TestSuite();
                NamedNodeMap nAttrMap = n.getAttributes();

                s.setName(nAttrMap.getNamedItem("name").getNodeValue() + uniqueWhitespace);

                NodeList testCaseList = ((Element) n).getElementsByTagName("testcase");
                for (int j = 0; j < testCaseList.getLength(); j++) // looping through test cases
                {
                    Node x = testCaseList.item(j);
                    NamedNodeMap xAttrMap = x.getAttributes();

                    TestSuite testCaseSuite = new TestSuite();
                    testCaseSuite.setName(xAttrMap.getNamedItem("name").getNodeValue() + uniqueWhitespace);

                    NodeList testList = ((Element) x).getElementsByTagName("test");
                    for (int k = 0; k < testList.getLength(); k++) // looping through tests
                    {
                        Node testNode = testList.item(k);
                        NamedNodeMap testAttrMap = testNode.getAttributes();

                        Test t = new GeneratedTest(
                                testAttrMap.getNamedItem("name").getNodeValue() + uniqueWhitespace);

                        if (testAttrMap.getNamedItem("result").getNodeValue().equals("fail")) {
                            ((GeneratedTest) t).testFailMessage = testAttrMap.getNamedItem("message")
                                    .getNodeValue();
                        }

                        testCaseSuite.addTest(t);
                    }

                    s.addTest(testCaseSuite);
                }

                browserSuite.addTest(s);
            }

            //suite.addTest(browserSuite);
            browserLoopIterationNumber++;
        } // end try
        catch (Exception e) {
            throw (e);
        } finally {
            if (isSeleniumStarted) {
                selenium.stop();
                isSeleniumStarted = false;
            }
        }
    } // end for loop on browsers

    totalTime = System.currentTimeMillis() - totalTime; // elapsed time in milis
    if (totalTime < 1000) {
        System.out.println("Cross-browser javascript unit tests completed in " + totalTime + " miliseconds.");
    } else if (totalTime < 60000) {
        totalTime = totalTime / 1000;
        System.out.println("Cross-browser javascript unit tests completed in " + totalTime + " seconds.");
    } else if (totalTime < 3600000) {
        totalTime = totalTime / (1000 * 60);
        System.out.println("Cross-browser javascript unit tests completed in " + totalTime + " minutes.");
    } else {
        totalTime = totalTime / (1000 * 60 * 60);
        System.out.println("Cross-browser javascript unit tests completed in " + totalTime + " hours.");
    }

    return suite;
}

From source file:org.openiot.gsn.utils.GSNMonitor.java

public static void parseXML(String s) {
    try {/*  w  w w.  ja va2  s  . c o m*/

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        InputSource inputSource = new InputSource();
        inputSource.setCharacterStream(new StringReader(s));

        Document document = documentBuilder.parse(inputSource);
        NodeList nodes = document.getElementsByTagName("virtual-sensor");

        for (int i = 0; i < nodes.getLength(); i++) {
            Element element = (Element) nodes.item(i);

            String sensor_name = element.getAttribute("name");

            if (!sensorsUpdateDelay.containsKey(sensor_name))
                continue; // skip sensors that are not monitored

            logger.warn("Sensor: " + sensor_name);

            NodeList listOfField = element.getElementsByTagName("field");
            for (int j = 0; j < listOfField.getLength(); j++) {
                Element line = (Element) listOfField.item(j);

                if (line.getAttribute("name").indexOf("timed") >= 0) {
                    String last_updated_as_string = line.getTextContent();

                    try {
                        Long last_updated_as_Long = GregorianCalendar.getInstance().getTimeInMillis()
                                - VSensorMonitorConfig.datetime2timestamp(last_updated_as_string);
                        logger.warn(new StringBuilder(last_updated_as_string).append(" => ")
                                .append(VSensorMonitorConfig.ms2dhms(last_updated_as_Long)).toString());

                        sensorsUpdateDelay.put(sensor_name, last_updated_as_Long);
                    } catch (ParseException e) {
                        errorsBuffer.append("Last update time for sensor ").append(sensor_name)
                                .append(" cannot be read. Error while parsing > ")
                                .append(last_updated_as_string).append(" <\n");
                    }
                }
            }
        }
    } catch (Exception e) {
        logger.warn("Exception while parsing XML\n");
        e.printStackTrace();
    }
}

From source file:Main.java

/**
 * Utility to get the bytes uri/*  w  w  w  .j a  va2s.  c  o  m*/
 *
 * @param source the resource to get
 */
public static InputSource sourceToInputSource(Source source) {
    if (source instanceof SAXSource) {
        return ((SAXSource) source).getInputSource();
    } else if (source instanceof DOMSource) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Node node = ((DOMSource) source).getNode();
        if (node instanceof Document) {
            node = ((Document) node).getDocumentElement();
        }
        Element domElement = (Element) node;
        ElementToStream(domElement, baos);
        InputSource isource = new InputSource(source.getSystemId());
        isource.setByteStream(new ByteArrayInputStream(baos.toByteArray()));
        return isource;
    } else if (source instanceof StreamSource) {
        StreamSource ss = (StreamSource) source;
        InputSource isource = new InputSource(ss.getSystemId());
        isource.setByteStream(ss.getInputStream());
        isource.setCharacterStream(ss.getReader());
        isource.setPublicId(ss.getPublicId());
        return isource;
    } else {
        return getInputSourceFromURI(source.getSystemId());
    }
}

From source file:org.apache.lens.regression.util.Util.java

public static Document getDocument(String xmlContent)
        throws ParserConfigurationException, SAXException, IOException {

    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xmlContent));
    Document doc = db.parse(is);/* www .  j av a  2s . c o  m*/
    return doc;
}

From source file:com.fota.Link.sdpApi.java

public static String getNcnInfo(String CTN) throws JDOMException {
    String resultStr = "";
    String logData = "";
    try {// ww w. j  a v  a2s  .c o m
        String endPointUrl = PropUtil.getPropValue("sdp.oif516.url");

        String strRequest = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' "
                + "xmlns:oas='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'"
                + " xmlns:sdp='http://kt.com/sdp'>" + "     <soapenv:Header>" + "         <oas:Security>"
                + "             <oas:UsernameToken>" + "                 <oas:Username>"
                + PropUtil.getPropValue("sdp.id") + "</oas:Username>" + "                 <oas:Password>"
                + PropUtil.getPropValue("sdp.pw") + "</oas:Password>" + "             </oas:UsernameToken>"
                + "         </oas:Security>" + "     </soapenv:Header>"

                + "     <soapenv:Body>" + "         <sdp:getBasicUserInfoAndMarketInfoRequest>"
                + "         <!--You may enterthe following 6 items in any order-->"
                + "             <sdp:CALL_CTN>" + CTN + "</sdp:CALL_CTN>"
                + "         </sdp:getBasicUserInfoAndMarketInfoRequest>\n" + "     </soapenv:Body>\n"
                + "</soapenv:Envelope>";

        logData = "\r\n---------- Get Ncn Req Info start ----------\r\n";
        logData += " get Ncn Req Info - endPointUrl : " + endPointUrl;
        logData += "\r\n get Ncn Req Info - Content-type : text/xml;charset=utf-8";
        logData += "\r\n get Ncn Req Info - RequestMethod : POST";
        logData += "\r\n get Ncn Req Info - xml : " + strRequest;
        logData += "\r\n---------- Get Ncn Req Info end ----------";

        logger.info(logData);

        // connection
        URL url = new URL(endPointUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("Content-type", "text/xml;charset=utf-8");
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.connect();

        // output
        OutputStream os = connection.getOutputStream();
        // os.write(strRequest.getBytes(), 0, strRequest.length());
        os.write(strRequest.getBytes("utf-8"));
        os.flush();
        os.close();

        // input
        InputStream is = connection.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));
        String line = "";
        String resValue = "";
        String parseStr = "";
        while ((line = br.readLine()) != null) {
            System.out.println(line);
            parseStr = line;

        }

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        InputSource temp = new InputSource();
        temp.setCharacterStream(new StringReader(parseStr));
        Document doc = builder.parse(temp); //xml?

        NodeList list = doc.getElementsByTagName("*");

        int i = 0;
        Element element;
        String contents;

        String contractNum = "";
        String customerId = "";
        while (list.item(i) != null) {
            element = (Element) list.item(i);
            if (element.hasChildNodes()) {
                contents = element.getFirstChild().getNodeValue();
                System.out.println(element.getNodeName() + " / " + element.getFirstChild().getNodeName());

                if (element.getNodeName().equals("sdp:NS_CONTRACT_NUM")) {
                    //                  resultStr = element.getFirstChild().getNodeValue();
                    contractNum = element.getFirstChild().getNodeValue();
                }
                if (element.getNodeName().equals("sdp:NS_CUSTOMER_ID")) {
                    customerId = element.getFirstChild().getNodeValue();
                }

                //               System.out.println(" >>>>> " + contents);
            }
            i++;
        }

        //         System.out.println("contractNum : " + contractNum + " / cusomerId : " + customerId);

        resultStr = getNcnFromContractnumAndCustomerId(contractNum, customerId);
        //         System.out.println("ncn : " + resultStr);

        //resultStr = resValue;         
        //         resultStr = java.net.URLDecoder.decode(resultStr, "euc-kr");
        connection.disconnect();

    } catch (Exception e) {
        e.printStackTrace();
    }

    return resultStr;
}

From source file:dk.clarin.tools.workflow.java

public static String errorInfo(String toolsandfiles) {
    String body = "";
    try {//w  w  w .  j a  v  a2s  .c om
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(toolsandfiles));

        Document doc = db.parse(is);
        NodeList nodes = doc.getElementsByTagName("step");

        // iterate the results
        for (int i = 0; i < nodes.getLength(); ++i) {
            Element element = (Element) nodes.item(i);

            //NodeList JobNrlist = element.getElementsByTagName("JobNr");
            //Element JobNrelement = (Element) JobNrlist.item(0);
            //String JobNr = getCharacterDataFromElement(JobNrelement);

            NodeList JobIDlist = element.getElementsByTagName("JobId");
            Element JobIDelement = (Element) JobIDlist.item(0);
            String JobID = getCharacterDataFromElement(JobIDelement);

            NodeList toollist = element.getElementsByTagName("tool");
            Element toolelement = (Element) toollist.item(0);
            String tool = getCharacterDataFromElement(toolelement);

            body += "Fejlen skete i trin " + JobID + " (vrktj: " + tool + ")" + ":<br />\n";

            NodeList itemslist = element.getElementsByTagName("item");
            if (itemslist.getLength() > 0) {
                body += "Vrktjet havde disse resurser som input:<br />\n";
                for (int j = 0; j < itemslist.getLength(); ++j) {
                    Element item = (Element) itemslist.item(j);

                    NodeList idlist = item.getElementsByTagName("id");
                    Element idelement = (Element) idlist.item(0);
                    String id = getCharacterDataFromElement(idelement);

                    NodeList titlelist = item.getElementsByTagName("title");
                    Element titleelement = (Element) titlelist.item(0);
                    String title = getCharacterDataFromElement(titleelement);
                    body += id + " \'" + title + "\'<br />\n";
                }
                if (i > 0)
                    body += "<br />\n(Input fra eventuelt foregende trin er ikke nvnt.)<br />\n";
                else
                    body += "<br />\n";
            }
        }
    } catch (Exception e) {
        logger.error(e.getMessage());
    }
    return body;
}

From source file:com.alliander.osgp.platform.cucumber.RunXpathResult.java

public XpathResult runXPathExpression(final String response, final String path)
        throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {

    final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    final DocumentBuilder builder = factory.newDocumentBuilder();
    final InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(response));
    final Document doc = builder.parse(is);
    final XPathFactory xPathfactory = XPathFactory.newInstance();
    final XPath xpath = xPathfactory.newXPath();

    return new XpathResult(xpath.compile(path), doc);
}

From source file:forge.quest.io.QuestDataIO.java

/**
 * <p>//ww w .ja  v  a2 s  .co  m
 * updateSaveFile.
 * </p>
 *
 * @param newData
 *            a {@link forge.quest.data.QuestData} object.
 * @param input
 *            a {@link java.lang.String} object.
 * @throws ParserConfigurationException
 * @throws IOException
 * @throws SAXException
 * @throws NoSuchFieldException
 * @throws IllegalAccessException
 */
private static void updateSaveFile(final QuestData newData, final String input, String filename)
        throws ParserConfigurationException, SAXException, IOException, IllegalAccessException,
        NoSuchFieldException {
    final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    final InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(input));
    final Document document = builder.parse(is);

    final int saveVersion = newData.getVersionNumber();

    if (saveVersion < 3) {
        QuestDataIO.setFinalField(QuestData.class, "assets", newData, new QuestAssets(null));

        final int diffIdx = Integer
                .parseInt(document.getElementsByTagName("diffIndex").item(0).getTextContent());
        QuestDataIO.setFinalField(QuestData.class, "achievements", newData, new QuestAchievements(diffIdx));
    }

    if (saveVersion < 4) {
        QuestDataIO.setFinalField(QuestAssets.class, "inventoryItems", newData.getAssets(),
                new EnumMap<QuestItemType, Integer>(QuestItemType.class));
    }

    if (saveVersion < 5) {
        QuestDataIO.setFinalField(QuestAssets.class, "combatPets", newData.getAssets(),
                new HashMap<String, QuestItemCondition>());
    }

    if (saveVersion < 6) {
        QuestDataIO.setFinalField(QuestData.class, "petSlots", newData, new HashMap<>());
    }

    if (saveVersion < 8) {
        QuestDataIO.setFinalField(QuestData.class, "isCharmActive", newData, false);
    }

    final QuestAssets qS = newData.getAssets();
    final QuestAchievements qA = newData.getAchievements();

    switch (saveVersion) {
    // There should be a fall-through between the cases so that each
    // version's changes get applied progressively
    case 0:
        // First beta release with new file format,
        // inventory needs to be migrated
        QuestDataIO.setFinalField(QuestAssets.class, "inventoryItems", newData.getAssets(),
                new EnumMap<QuestItemType, Integer>(QuestItemType.class));
        qS.setItemLevel(QuestItemType.ESTATES,
                Integer.parseInt(document.getElementsByTagName("estatesLevel").item(0).getTextContent()));
        qS.setItemLevel(QuestItemType.LUCKY_COIN,
                Integer.parseInt(document.getElementsByTagName("luckyCoinLevel").item(0).getTextContent()));
        qS.setItemLevel(QuestItemType.SLEIGHT,
                Integer.parseInt(document.getElementsByTagName("sleightOfHandLevel").item(0).getTextContent()));

        final int gearLevel = Integer
                .parseInt(document.getElementsByTagName("gearLevel").item(0).getTextContent());
        if (gearLevel >= 1) {
            newData.getAssets().setItemLevel(QuestItemType.MAP, 1);
        }
        if (gearLevel == 2) {
            newData.getAssets().setItemLevel(QuestItemType.ZEPPELIN, 1);
        }
        //$FALL-THROUGH$
    case 1:
        // nothing to do here, everything is managed by CardPoolToXml
        // deserializer

    case 2:
        // questdata was divided into assets and achievements
        if (StringUtils.isBlank(newData.getName())) {
            QuestDataIO.setFinalField(QuestData.class, "name", newData, filename);
        }

        QuestDataIO.setFinalField(QuestAchievements.class, "win", qA,
                Integer.parseInt(document.getElementsByTagName("win").item(0).getTextContent()));
        QuestDataIO.setFinalField(QuestAchievements.class, "lost", qA,
                Integer.parseInt(document.getElementsByTagName("lost").item(0).getTextContent()));

        Node nw;
        if ((nw = document.getElementsByTagName("winstreakBest").item(0)) != null) {
            QuestDataIO.setFinalField(QuestAchievements.class, "winstreakBest", qA,
                    Integer.parseInt(nw.getTextContent()));
        }
        if ((nw = document.getElementsByTagName("winstreakCurrent").item(0)) != null) {
            QuestDataIO.setFinalField(QuestAchievements.class, "winstreakCurrent", qA,
                    Integer.parseInt(nw.getTextContent()));
        }

        QuestDataIO.setFinalField(QuestAchievements.class, "challengesPlayed", qA,
                Integer.parseInt(document.getElementsByTagName("challengesPlayed").item(0).getTextContent()));

        final List<Integer> completedChallenges = new ArrayList<>();
        QuestDataIO.setFinalField(QuestAchievements.class, "completedChallenges", qA, completedChallenges);

        if ((nw = document.getElementsByTagName("completedChallenges").item(0)) != null) {
            final NodeList ccs = nw.getChildNodes();
            for (int iN = 0; iN < ccs.getLength(); iN++) {
                final Node n0 = ccs.item(iN);
                if (n0.getNodeType() != Node.ELEMENT_NODE) {
                    continue;
                }
                completedChallenges.add(Integer.parseInt(n0.getTextContent()));
            }
        }

        final XStream xs = QuestDataIO.getSerializer(true);

        QuestDataIO.setFinalField(QuestAssets.class, "credits", qS,
                Integer.parseInt(document.getElementsByTagName("credits").item(0).getTextContent()));
        QuestDataIO.setFinalField(QuestAssets.class, "cardPool", qS,
                QuestDataIO.readAsset(xs, document, "cardPool", ItemPool.class));
        QuestDataIO.setFinalField(QuestAssets.class, "myDecks", qS,
                QuestDataIO.readAsset(xs, document, "myDecks", HashMap.class));
        QuestDataIO.setFinalField(QuestAssets.class, "shopList", qS,
                QuestDataIO.readAsset(xs, document, "shopList", ItemPool.class));
        QuestDataIO.setFinalField(QuestAssets.class, "newCardList", qS,
                QuestDataIO.readAsset(xs, document, "newCardList", ItemPool.class));

        //$FALL-THROUGH$
    case 3:
        // QuestInventory class no longer exists - KV pairs of
        // QuestItemPair => level moved to assets
        final Node oldInventory = saveVersion > 0 ? document.getElementsByTagName("inventory").item(1) : null;
        if (null != oldInventory) {
            for (int iN = 0; iN < oldInventory.getChildNodes().getLength(); iN++) {
                final Node _n = oldInventory.getChildNodes().item(iN);
                if (_n.getNodeType() != Node.ELEMENT_NODE) {
                    continue;
                }
                final Element n = (Element) _n;
                final String name = n.getElementsByTagName("string").item(0).getTextContent();
                final QuestItemType qType = QuestItemType.valueFromSaveKey(name);
                int level = 0;
                for (int iX = 0; iX < n.getChildNodes().getLength(); iX++) {
                    final Node _x = n.getChildNodes().item(iX);
                    if (_x.getNodeType() != Node.ELEMENT_NODE) {
                        continue;
                    }
                    final Element x = (Element) _x;
                    if (!x.getTagName().startsWith("forge.quest.data.")) {
                        continue;
                    }
                    final String sLevel = x.getElementsByTagName("level").item(0).getTextContent();
                    if (StringUtils.isNotBlank(sLevel)) {
                        level = Integer.parseInt(sLevel);
                    }
                }
                qS.setItemLevel(qType, level);
            }
        }

        //$FALL-THROUGH$
    case 4:
        if (saveVersion > 0) {
            NodeList pets = document.getElementsByTagName("pets").item(0).getChildNodes();
            for (int i = 0; i < pets.getLength(); i++) {
                if (pets.item(i).getNodeType() != Node.ELEMENT_NODE) {
                    continue;
                }
                final Element entry = (Element) pets.item(i);
                String name = entry.getElementsByTagName("string").item(0).getTextContent();
                String sLevel = entry.getElementsByTagName("level").item(0).getTextContent();
                qS.setPetLevel(name, Integer.parseInt(sLevel));
            }

        }

        // pet manager will be re-engineered here
        //$FALL-THROUGH$
    case 5:
    case 6:
        // have to convert completed challenges list members to strings.
        for (int i = qA.getLockedChallenges().size() - 1; i >= 0; i--) {
            Object lc = qA.getLockedChallenges().get(i);
            if (lc != null) {
                qA.getLockedChallenges().set(i, lc.toString());
            }
        }
        for (int i = qA.getCurrentChallenges().size() - 1; i >= 0; i--) {
            Object lc = qA.getCurrentChallenges().get(i);
            if (lc != null) {
                qA.getCurrentChallenges().set(i, lc.toString());
            }
        }

        //$FALL-THROUGH$
    case 7:
    case 8:
        QuestDataIO.setFinalField(QuestAssets.class, "draftDecks", qS, new HashMap<String, DeckGroup>());
        break;
    }

    // mark the QD as the latest version
    newData.setVersionNumber(QuestData.CURRENT_VERSION_NUMBER);

}