Example usage for javax.xml.stream XMLStreamReader isEndElement

List of usage examples for javax.xml.stream XMLStreamReader isEndElement

Introduction

In this page you can find the example usage for javax.xml.stream XMLStreamReader isEndElement.

Prototype

public boolean isEndElement();

Source Link

Document

Returns true if the cursor points to an end tag (otherwise false)

Usage

From source file:org.jwebsocket.config.xml.JWebSocketConfigHandler.java

/**
 * private method that reads the config for plugins
 *
 * @param aStreamReader//from   ww w. j a  v  a 2 s.  c  o  m
 *      the stream reader object
 * @return the list of plugin configs
 * @throws XMLStreamException
 *       if exception occurs while reading
 */
protected List<PluginConfig> handlePlugins(XMLStreamReader aStreamReader) throws XMLStreamException {
    List<PluginConfig> lPlugins = new FastList<PluginConfig>();
    while (aStreamReader.hasNext()) {
        aStreamReader.next();
        if (aStreamReader.isStartElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_PLUGIN)) {
                PluginConfig lPlugin = (PluginConfig) handlerContext.get(lElementName)
                        .processConfig(aStreamReader);
                lPlugins.add(lPlugin);
            }
        }
        if (aStreamReader.isEndElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_PLUGINS)) {
                break;
            }
        }
    }
    return lPlugins;
}

From source file:org.jwebsocket.config.xml.JWebSocketConfigHandler.java

/**
 * private method that reads the config for filters
 *
 * @param aStreamReader/*w ww .  j a v  a 2  s  .co m*/
 *      the stream reader object
 * @return the list of filter configs
 * @throws XMLStreamException
 *       if exception occurs while reading
 */
protected List<FilterConfig> handleFilters(XMLStreamReader aStreamReader) throws XMLStreamException {
    List<FilterConfig> lFilters = new FastList<FilterConfig>();
    while (aStreamReader.hasNext()) {
        aStreamReader.next();
        if (aStreamReader.isStartElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_FILTER)) {
                FilterConfig lFilter = (FilterConfig) handlerContext.get(lElementName)
                        .processConfig(aStreamReader);
                lFilters.add(lFilter);
            }
        }
        if (aStreamReader.isEndElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_FILTERS)) {
                break;
            }
        }
    }
    return lFilters;
}

From source file:org.jwebsocket.config.xml.JWebSocketConfigHandler.java

/**
 * private method that reads the config for logging
 *
 * @param aStreamReader//from  ww  w .  java2  s  .  c om
 *      the stream reader object
 * @return the list of logging configs
 * @throws XMLStreamException
 *       if exception occurs while reading
 */
private List<LoggingConfig> handleLoggingConfigs(XMLStreamReader aStreamReader) throws XMLStreamException {
    List<LoggingConfig> loggingConfigs = new FastList<LoggingConfig>();
    while (aStreamReader.hasNext()) {
        aStreamReader.next();
        if (aStreamReader.isStartElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_LOG4J)) {
                LoggingConfig loggingConfig = (LoggingConfig) handlerContext.get(lElementName)
                        .processConfig(aStreamReader);
                loggingConfigs.add(loggingConfig);
            }
        }
        if (aStreamReader.isEndElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_LOGGING)) {
                break;
            }
        }
    }
    return loggingConfigs;
}

From source file:org.jwebsocket.config.xml.JWebSocketConfigHandler.java

/**
 * private method that reads the list of server configs
 *
 * @param aStreamReader/*from  w  w  w. j  a v  a 2  s  . c o m*/
 *      the stream reader object
 * @return the list of server configs
 * @throws XMLStreamException
 *       if exception occurs reading xml
 */
private List<ServerConfig> handleServers(XMLStreamReader aStreamReader) throws XMLStreamException {
    List<ServerConfig> lServers = new FastList<ServerConfig>();
    while (aStreamReader.hasNext()) {
        aStreamReader.next();
        if (aStreamReader.isStartElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_SERVER)) {
                ServerConfig lServer = (ServerConfig) handlerContext.get(lElementName)
                        .processConfig(aStreamReader);
                lServers.add(lServer);
            }
        }
        if (aStreamReader.isEndElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_SERVERS)) {
                break;
            }
        }
    }
    return lServers;
}

From source file:org.jwebsocket.config.xml.JWebSocketConfigHandler.java

/**
 * private method that reads the list of engines config from the xml file
 *
 * @param aStreamReader//from   ww w  .  java 2  s  .c  om
 *      the stream reader object
 * @return the list of engine configs
 * @throws XMLStreamException
 *       if exception occurs while reading
 */
private List<LibraryConfig> handleLibraries(XMLStreamReader aStreamReader) throws XMLStreamException {
    List<LibraryConfig> lLibraries = new FastList<LibraryConfig>();
    while (aStreamReader.hasNext()) {
        aStreamReader.next();
        if (aStreamReader.isStartElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_LIBRARY)) {
                LibraryConfig lLibrary = (LibraryConfig) handlerContext.get(lElementName)
                        .processConfig(aStreamReader);
                lLibraries.add(lLibrary);
            }
        }
        if (aStreamReader.isEndElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_LIBRARIES)) {
                break;
            }
        }
    }
    return lLibraries;
}

From source file:org.jwebsocket.config.xml.JWebSocketConfigHandler.java

/**
 * private method that reads the list of engines config from the xml file
 *
 * @param aStreamReader/*from w w w . ja  va 2  s .  c  o  m*/
 *      the stream reader object
 * @return the list of engine configs
 * @throws XMLStreamException
 *       if exception occurs while reading
 */
private List<EngineConfig> handleEngines(XMLStreamReader aStreamReader) throws XMLStreamException {
    List<EngineConfig> lEngines = new FastList<EngineConfig>();
    while (aStreamReader.hasNext()) {
        aStreamReader.next();
        if (aStreamReader.isStartElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_ENGINE)) {
                EngineConfig lEngine = (EngineConfig) handlerContext.get(lElementName)
                        .processConfig(aStreamReader);
                lEngines.add(lEngine);
            }
        }
        if (aStreamReader.isEndElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(ELEMENT_ENGINES)) {
                break;
            }
        }
    }
    return lEngines;
}

From source file:org.jwebsocket.config.xml.JWebSocketConfigHandler.java

/**
 * Read the map of plug-in specific settings
 * @param aStreamReader// ww w.  ja  v a2 s  .  c o  m
 *        the stream reader object
 * @return the list of domains for the engine
 * @throws XMLStreamException
 *         in case of stream exception
 */
public static Map<String, Object> getSettings(XMLStreamReader aStreamReader) throws XMLStreamException {

    Map<String, Object> lSettings = new FastMap<String, Object>();
    while (aStreamReader.hasNext()) {
        aStreamReader.next();
        if (aStreamReader.isStartElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(SETTING)) {
                String lKey = aStreamReader.getAttributeValue(null, "key");
                String lType = aStreamReader.getAttributeValue(null, "type");

                aStreamReader.next();
                String lValue = aStreamReader.getText();

                if (lKey != null && lValue != null) {
                    if ("json".equalsIgnoreCase(lType)) {
                        JSONObject lJSON = null;
                        try {
                            lJSON = new JSONObject(lValue);
                        } catch (JSONException lEx) {
                            // TODO: handle invalid JSON code in settings properly!
                        }
                        lSettings.put(lKey, lJSON);
                    } else {
                        lSettings.put(lKey, lValue);
                    }
                }
            }
        }

        if (aStreamReader.isEndElement()) {
            String lElementName = aStreamReader.getLocalName();
            if (lElementName.equals(SETTINGS)) {
                break;
            }
        }
    }

    return lSettings;
}

From source file:org.osaf.cosmo.xml.DomReader.java

private static Node readNode(Document d, XMLStreamReader reader) throws XMLStreamException {
    Node root = null;/*from w  w w .  j  a v a2  s  . c o  m*/
    Node current = null;

    while (reader.hasNext()) {
        reader.next();

        if (reader.isEndElement()) {
            //log.debug("Finished reading " + current.getNodeName());

            if (current.getParentNode() == null)
                break;

            //log.debug("Setting current to " +
            //current.getParentNode().getNodeName());
            current = current.getParentNode();
        }

        if (reader.isStartElement()) {
            Element e = readElement(d, reader);
            if (root == null) {
                //log.debug("Setting root to " + e.getNodeName());
                root = e;
            }

            if (current != null) {
                //log.debug("Appending child " + e.getNodeName() + " to " +
                //current.getNodeName());
                current.appendChild(e);
            }

            //log.debug("Setting current to " + e.getNodeName());
            current = e;

            continue;
        }

        if (reader.isCharacters()) {
            CharacterData cd = d.createTextNode(reader.getText());
            if (root == null)
                return cd;
            if (current == null)
                return cd;

            //log.debug("Appending text '" + cd.getData() + "' to " +
            //current.getNodeName());
            current.appendChild(cd);

            continue;
        }
    }

    return root;
}

From source file:org.unitedinternet.cosmo.util.DomReader.java

private static Node readNode(Document d, XMLStreamReader reader) throws XMLStreamException {
    Node root = null;//from w  ww. j ava2s  .co  m
    Node current = null;

    while (reader.hasNext()) {
        reader.next();

        if (reader.isEndElement()) {
            //log.debug("Finished reading " + current.getNodeName());

            if (current.getParentNode() == null) {
                break;
            }

            //log.debug("Setting current to " +
            //current.getParentNode().getNodeName());
            current = current.getParentNode();
        }

        if (reader.isStartElement()) {
            Element e = readElement(d, reader);
            if (root == null) {
                //log.debug("Setting root to " + e.getNodeName());
                root = e;
            }

            if (current != null) {
                //log.debug("Appending child " + e.getNodeName() + " to " +
                //current.getNodeName());
                current.appendChild(e);
            }

            //log.debug("Setting current to " + e.getNodeName());
            current = e;

            continue;
        }

        if (reader.isCharacters()) {
            CharacterData cd = d.createTextNode(reader.getText());
            if (root == null) {
                return cd;
            }
            if (current == null) {
                return cd;
            }

            //log.debug("Appending text '" + cd.getData() + "' to " +
            //current.getNodeName());
            current.appendChild(cd);

            continue;
        }
    }

    return root;
}

From source file:org.wso2.carbon.registry.core.jdbc.Repository.java

@SuppressWarnings("deprecation")
private void restoreRecursively(String path, XMLStreamReader xmlReader, DumpReader dumpReader,
        long currentVersion, boolean resourceExists) throws RegistryException, XMLStreamException {
    // we need to check the authorization with the current resource path at this point
    if (!AuthorizationUtils.authorize(path, ActionConstants.PUT)) {
        String msg = "Failed to check-in resource " + path + ". User " + CurrentSession.getUser()
                + " is not authorized to update " + "the current collection path " + path + ".";
        log.warn(msg);/*from  w w  w. j  av  a  2 s . co m*/
        throw new AuthorizationFailedException(msg);
    }

    while (!xmlReader.isStartElement() && xmlReader.hasNext()) {
        xmlReader.next();
    }

    if (!xmlReader.hasNext()) {
        // nothing to parse
        return;
    }

    if (!xmlReader.getLocalName().equals(DumpConstants.RESOURCE)) {
        String msg = "Invalid dump to restore at " + path;
        log.error(msg);
        throw new RegistryException(msg);
    }

    String incomingParentPath = xmlReader.getAttributeValue(null, DumpConstants.RESOURCE_PATH);
    // the name of the resource is used instead of the path
    String resourceName = xmlReader.getAttributeValue(null, DumpConstants.RESOURCE_NAME);
    String ignoreConflictsStrValue = xmlReader.getAttributeValue(null, DumpConstants.IGNORE_CONFLICTS);

    boolean ignoreConflicts = true;
    if (ignoreConflictsStrValue != null && Boolean.toString(false).equals(ignoreConflictsStrValue)) {
        ignoreConflicts = false;
    }

    String isCollectionString = xmlReader.getAttributeValue(null, DumpConstants.RESOURCE_IS_COLLECTION);
    boolean isCollection = isCollectionString.equals(DumpConstants.RESOURCE_IS_COLLECTION_TRUE);

    if (path.equals(RegistryConstants.ROOT_PATH) && !isCollection) {
        // you can not put non collection to the root path
        String msg = "Illegal to restore a non-collection in place of root collection.";
        log.error(msg);
        throw new RegistryException(msg);
    }

    String status = xmlReader.getAttributeValue(null, DumpConstants.RESOURCE_STATUS);

    //if the status is deleted we delete that resource/collection
    if (DumpConstants.RESOURCE_DELETED.equals(status) && resourceExists) {
        delete(path);
        return;
    }

    ResourceImpl resourceImpl;
    byte[] contentBytes = new byte[0];
    if (isCollection) {
        resourceImpl = new CollectionImpl();
    } else {
        resourceImpl = new ResourceImpl();
    }

    List<CommentDO> commentDOList = new ArrayList<CommentDO>();
    List<TaggingDO> taggingDOList = new ArrayList<TaggingDO>();
    List<RatingDO> ratingDOList = new ArrayList<RatingDO>();
    List<Association> associationList = new ArrayList<Association>();

    boolean isCreatorExisting = false;
    boolean isCreatedTimeExisting = false;
    boolean isUpdaterExisting = false;
    boolean isUpdatedTimeExisting = false;
    long dumpingResourceVersion = -1;

    // traversing to the next element
    do {
        xmlReader.next();
    } while (!xmlReader.isStartElement() && xmlReader.hasNext());

    while (xmlReader.hasNext()) {
        String localName = xmlReader.getLocalName();

        // setMediaType
        if (localName.equals(DumpConstants.MEDIA_TYPE)) {
            String text = xmlReader.getElementText();
            if (text.indexOf('/') < 0) {
                text = MediaTypesUtils.getMediaType("dummy." + text);
            }
            if (text != null) {
                resourceImpl.setMediaType(text);
            }
            // now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
        // creator
        else if (localName.equals(DumpConstants.CREATOR)) {
            String text = xmlReader.getElementText();
            if (text != null) {
                resourceImpl.setAuthorUserName(text);
                isCreatorExisting = true;
            }
            // now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
        // version: just to keep track of the server changes
        else if (localName.equals(DumpConstants.VERSION)) {
            String text = xmlReader.getElementText();
            if (text != null) {
                dumpingResourceVersion = Long.parseLong(text);
            }
            // now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
        // uuid: just to keep track of the server changes
        else if (localName.equals(DumpConstants.UUID)) {
            String text = xmlReader.getElementText();
            if (text != null) {
                resourceImpl.setUUID(text);
            }
            // now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
        // createdTime
        else if (localName.equals(DumpConstants.CREATED_TIME)) {
            String text = xmlReader.getElementText();
            if (text != null) {
                long date = Long.parseLong(text);
                resourceImpl.setCreatedTime(new Date(date));
                isCreatedTimeExisting = true;
            }
            // now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
        // setLastUpdater
        else if (localName.equals(DumpConstants.LAST_UPDATER)) {
            String text = xmlReader.getElementText();
            if (text != null) {
                resourceImpl.setLastUpdaterUserName(text);
                isUpdaterExisting = true;
            }
            // now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
        // LastModified
        else if (localName.equals(DumpConstants.LAST_MODIFIED)) {
            String text = xmlReader.getElementText();
            if (text != null) {
                long date = Long.parseLong(text);
                resourceImpl.setLastModified(new Date(date));
                isUpdatedTimeExisting = true;
            }
            // now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
        // get description
        else if (localName.equals(DumpConstants.DESCRIPTION)) {
            String text = xmlReader.getElementText();
            if (text != null) {
                resourceImpl.setDescription(text);
            }
            // now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
        // get properties
        else if (localName.equals(DumpConstants.PROPERTIES)) {
            // iterating trying to find the children..
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
            while (xmlReader.hasNext() && xmlReader.getLocalName().equals(DumpConstants.PROPERTY_ENTRY)) {
                String key = xmlReader.getAttributeValue(null, DumpConstants.PROPERTY_ENTRY_KEY);
                String text = xmlReader.getElementText();
                if (text.equals("")) {
                    text = null;
                }
                if (text != null) {
                    resourceImpl.addPropertyWithNoUpdate(key, text);
                }
                do {
                    xmlReader.next();
                } while (!xmlReader.isStartElement() && xmlReader.hasNext());
            }
        }
        // get content
        else if (localName.equals(DumpConstants.CONTENT)) {
            String text = xmlReader.getElementText();
            // we keep content as base64 encoded
            if (text != null) {
                contentBytes = Base64.decode(text);
            }
            do {
                xmlReader.next();
            } while ((!xmlReader.isStartElement() && xmlReader.hasNext())
                    && !(xmlReader.isEndElement() && xmlReader.getLocalName().equals(DumpConstants.RESOURCE)));
        }
        // getting comment information
        else if (localName.equals(DumpConstants.COMMENTS)) {
            // iterating trying to find the children..
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
            while (xmlReader.hasNext() && xmlReader.getLocalName().equals(DumpConstants.COMMENT_ENTRY)) {
                CommentDO commentDO = new CommentDO();

                do {
                    xmlReader.next();
                } while (!xmlReader.isStartElement() && xmlReader.hasNext());

                localName = xmlReader.getLocalName();
                while (xmlReader.hasNext() && (localName.equals(DumpConstants.COMMENT_ENTRY_USER)
                        || localName.equals(DumpConstants.COMMENT_ENTRY_TEXT))) {
                    if (localName.equals(DumpConstants.COMMENT_ENTRY_USER)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            commentDO.setCommentedUser(text);
                        }
                    } else if (localName.equals(DumpConstants.COMMENT_ENTRY_TEXT)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            commentDO.setCommentText(text);
                        }
                    }

                    do {
                        xmlReader.next();
                    } while (!xmlReader.isStartElement() && xmlReader.hasNext());
                    if (xmlReader.hasNext()) {
                        localName = xmlReader.getLocalName();
                    }
                }
                commentDOList.add(commentDO);
            }
        }
        // getting tagging information
        else if (localName.equals(DumpConstants.TAGGINGS)) {
            // iterating trying to find the children..
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
            while (xmlReader.hasNext() && xmlReader.getLocalName().equals(DumpConstants.TAGGING_ENTRY)) {

                TaggingDO taggingDO = new TaggingDO();

                do {
                    xmlReader.next();
                } while (!xmlReader.isStartElement() && xmlReader.hasNext());

                localName = xmlReader.getLocalName();
                while (xmlReader.hasNext() && (localName.equals(DumpConstants.TAGGING_ENTRY_USER)
                        || localName.equals(DumpConstants.TAGGING_ENTRY_DATE)
                        || localName.equals(DumpConstants.TAGGING_ENTRY_TAG_NAME))) {
                    if (localName.equals(DumpConstants.TAGGING_ENTRY_USER)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            taggingDO.setTaggedUserName(text);
                        }
                    } else if (localName.equals(DumpConstants.TAGGING_ENTRY_DATE)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            long date = Long.parseLong(text);
                            taggingDO.setTaggedTime(new Date(date));
                        }
                    } else if (localName.equals(DumpConstants.TAGGING_ENTRY_TAG_NAME)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            taggingDO.setTagName(text);
                        }
                    }
                    do {
                        xmlReader.next();
                    } while (!xmlReader.isStartElement() && xmlReader.hasNext());
                    if (xmlReader.hasNext()) {
                        localName = xmlReader.getLocalName();
                    }
                }
                taggingDOList.add(taggingDO);
            }
        }
        // getting rating information
        else if (localName.equals(DumpConstants.RATINGS)) {
            // iterating trying to find the children..
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
            while (xmlReader.hasNext() && xmlReader.getLocalName().equals(DumpConstants.RATING_ENTRY)) {
                RatingDO ratingDO = new RatingDO();

                do {
                    xmlReader.next();
                } while (!xmlReader.isStartElement() && xmlReader.hasNext());

                localName = xmlReader.getLocalName();
                while (xmlReader.hasNext() && (localName.equals(DumpConstants.RATING_ENTRY_USER)
                        || localName.equals(DumpConstants.RATING_ENTRY_DATE)
                        || localName.equals(DumpConstants.RATING_ENTRY_RATE))) {
                    if (localName.equals(DumpConstants.RATING_ENTRY_USER)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            ratingDO.setRatedUserName(text);
                        }
                    } else if (localName.equals(DumpConstants.RATING_ENTRY_DATE)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            long date = Long.parseLong(text);
                            ratingDO.setRatedTime(new Date(date));
                        }
                    } else if (localName.equals(DumpConstants.RATING_ENTRY_RATE)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            int ratingValue = Integer.parseInt(text);
                            ratingDO.setRating(ratingValue);
                        }
                    }
                    do {
                        xmlReader.next();
                    } while (!xmlReader.isStartElement() && xmlReader.hasNext());
                    if (xmlReader.hasNext()) {
                        localName = xmlReader.getLocalName();
                    }
                }
                ratingDOList.add(ratingDO);
            }
        }

        // getting rating information
        else if (localName.equals(DumpConstants.ASSOCIATIONS)) {
            // iterating trying to find the children..
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
            while (xmlReader.hasNext() && xmlReader.getLocalName().equals(DumpConstants.ASSOCIATION_ENTRY)) {
                String source = null;
                String destination = null;
                String type = null;

                do {
                    xmlReader.next();
                } while (!xmlReader.isStartElement() && xmlReader.hasNext());

                localName = xmlReader.getLocalName();
                while (xmlReader.hasNext() && (localName.equals(DumpConstants.ASSOCIATION_ENTRY_SOURCE)
                        || localName.equals(DumpConstants.ASSOCIATION_ENTRY_DESTINATION)
                        || localName.equals(DumpConstants.ASSOCIATION_ENTRY_TYPE))) {
                    if (localName.equals(DumpConstants.ASSOCIATION_ENTRY_SOURCE)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            source = text;
                        }
                    } else if (localName.equals(DumpConstants.ASSOCIATION_ENTRY_DESTINATION)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            destination = text;
                        }
                    } else if (localName.equals(DumpConstants.ASSOCIATION_ENTRY_TYPE)) {
                        String text = xmlReader.getElementText();
                        if (text != null) {
                            type = text;
                        }
                    }
                    do {
                        xmlReader.next();
                    } while (!xmlReader.isStartElement() && xmlReader.hasNext());
                    if (xmlReader.hasNext()) {
                        localName = xmlReader.getLocalName();
                    }
                }
                // get the source and destination as absolute paths
                source = RegistryUtils.getAbsoluteAssociationPath(source, path);
                if (destination.startsWith(DumpConstants.EXTERNAL_ASSOCIATION_DESTINATION_PREFIX)) {
                    destination = destination
                            .substring(DumpConstants.EXTERNAL_ASSOCIATION_DESTINATION_PREFIX.length());
                } else {
                    destination = RegistryUtils.getAbsoluteAssociationPath(destination, path);
                }
                associationList.add(new Association(source, destination, type));
            }
        }
        // getting children, just storing in array list now, will used at the end
        // we are keeping old name to keep backward compatibility.
        else if (localName.equals(DumpConstants.CHILDREN) || localName.equals(DumpConstants.CHILDS)) {
            // we keep the stream to call this function recursively
            break;
        } else if (localName.equals(DumpConstants.RESOURCE)) {
            // we keep the stream to call this function recursively
            break;
        } else {
            // we don't mind having unwanted elements, now go to the next element
            do {
                xmlReader.next();
            } while (!xmlReader.isStartElement() && xmlReader.hasNext());
        }
    }
    if (!ignoreConflicts) {
        // so we handling the conflicts.
        if (dumpingResourceVersion > 0) {
            if (currentVersion == -1) {
                // the current version == -1 means the resource is deleted in the server
                // but since the client is sending a version number, it has a previously checkout
                // resource
                String msg = "Resource is deleted in the server, resource path: " + path + ".";
                log.error(msg);
                throw new RegistryException(msg);
            }
            // we should check whether our dump is up-to-date
            if (currentVersion > dumpingResourceVersion) {
                // that mean the current resource is updated before the current version
                // so we have to notify user to get an update
                String msg = "Resource is in a newer version than the restoring version. " + "resource path: "
                        + path + ".";
                log.error(msg);
                throw new RegistryException(msg);
            }
        }
    }

    // completing the empty fields
    if (!isCreatorExisting) {
        String creator = CurrentSession.getUser();
        resourceImpl.setAuthorUserName(creator);
    }
    if (!isCreatedTimeExisting) {
        long now = System.currentTimeMillis();
        resourceImpl.setCreatedTime(new Date(now));
    }
    if (!isUpdaterExisting) {
        String updater = CurrentSession.getUser();
        resourceImpl.setLastUpdaterUserName(updater);
    }
    if (!isUpdatedTimeExisting) {
        long now = System.currentTimeMillis();
        resourceImpl.setLastModified(new Date(now));
    }

    if (resourceImpl.getUUID() == null) {
        setUUIDForResource(resourceImpl);
    }

    // create sym links
    String linkRestoration = resourceImpl.getProperty(RegistryConstants.REGISTRY_LINK_RESTORATION);
    if (linkRestoration != null) {
        String[] parts = linkRestoration.split(RegistryConstants.URL_SEPARATOR);
        if (parts.length == 4) {
            if (parts[2] != null && parts[2].length() == 0) {
                parts[2] = null;
            }
            if (parts[0] != null && parts[1] != null && parts[3] != null) {
                RegistryUtils.registerHandlerForRemoteLinks(RegistryContext.getBaseInstance(), parts[0],
                        parts[1], parts[2], parts[3]);
            }
        } else if (parts.length == 3) {
            // here parts[0] the current path, path[1] is the target path.
            if (parts[0] != null && parts[1] != null) {
                // first we are calculating the relative path of path[1] to path[0]
                String relativeTargetPath = RegistryUtils.getRelativeAssociationPath(parts[1], parts[0]);
                // then we derive the absolute path with reference to the current path.
                String absoluteTargetPath = RegistryUtils.getAbsoluteAssociationPath(relativeTargetPath, path);
                RegistryUtils.registerHandlerForSymbolicLinks(RegistryContext.getBaseInstance(), path,
                        absoluteTargetPath, parts[2]);
            }
        }
    }

    synchronized (this) {
        ResourceIDImpl resourceID = null;
        ResourceDO resourceDO = null;
        if (resourceDAO.resourceExists(path)) {
            resourceID = resourceDAO.getResourceID(path);
            resourceDO = resourceDAO.getResourceDO(resourceID);
            if (resourceDO == null) {
                if (isCollection) {
                    resourceID = resourceDAO.getResourceID(path, isCollection);
                    if (resourceID != null) {
                        resourceDO = resourceDAO.getResourceDO(resourceID);
                    }
                }
                if (resourceDO == null) {
                    return;
                }
            }
        }

        if (DumpConstants.RESOURCE_UPDATED.equals(status) || DumpConstants.RESOURCE_ADDED.equals(status)
                || DumpConstants.RESOURCE_DUMP.equals(status)) {
            if (resourceDAO.resourceExists(path)) {
                if (DumpConstants.RESOURCE_DUMP.equals(status)) {
                    delete(path);
                } else {
                    deleteNode(resourceID, resourceDO, true);
                }
            }
            if (resourceID == null) {
                // need to create a resourceID
                String parentPath = RegistryUtils.getParentPath(path);

                ResourceIDImpl parentResourceID = resourceDAO.getResourceID(parentPath, true);
                if (parentResourceID == null || !resourceDAO.resourceExists(parentResourceID)) {
                    addEmptyCollection(parentPath);
                    if (parentResourceID == null) {
                        parentResourceID = resourceDAO.getResourceID(parentPath, true);
                    }
                }
                resourceDAO.createAndApplyResourceID(path, parentResourceID, resourceImpl);
            } else {
                resourceImpl.setPathID(resourceID.getPathID());
                resourceImpl.setPath(path);
                resourceImpl.setName(resourceID.getName());
            }

            // adding resource followed by content (for nonCollection)
            if (!isCollection) {
                int contentId = 0;
                if (contentBytes.length > 0) {
                    contentId = resourceDAO.addContentBytes(new ByteArrayInputStream(contentBytes));
                }
                resourceImpl.setDbBasedContentID(contentId);
            }

            resourceDO = resourceImpl.getResourceDO();
            resourceDAO.addResourceDO(resourceDO);
            resourceImpl.setVersionNumber(resourceDO.getVersion());

            // adding the properties.
            resourceDAO.addProperties(resourceImpl);

            // adding comments
            commentsDAO.addComments(resourceImpl, commentDOList.toArray(new CommentDO[commentDOList.size()]));

            // adding tags
            tagsDAO.addTaggings(resourceImpl, taggingDOList.toArray(new TaggingDO[taggingDOList.size()]));

            // adding ratings
            ratingsDAO.addRatings(resourceImpl, ratingDOList.toArray(new RatingDO[ratingDOList.size()]));

            for (Association association : associationList) {
                associationDAO.addAssociation(association.getSourcePath(), association.getDestinationPath(),
                        association.getAssociationType());
            }
        }
    }

    if (!xmlReader.hasNext() || !(xmlReader.getLocalName().equals(DumpConstants.CHILDREN)
            || xmlReader.getLocalName().equals(DumpConstants.CHILDS))) {
        // finished the recursion
        return;
    }

    do {
        xmlReader.next();
        if (xmlReader.isEndElement() && (xmlReader.getLocalName().equals(DumpConstants.CHILDREN)
                || xmlReader.getLocalName().equals(DumpConstants.CHILDS))) {
            // this means empty children, just quit from here
            // before that we have to set the cursor to the start of the next element
            if (xmlReader.hasNext()) {
                do {
                    xmlReader.next();
                } while ((!xmlReader.isStartElement() && xmlReader.hasNext()) && !(xmlReader.isEndElement()
                        && xmlReader.getLocalName().equals(DumpConstants.RESOURCE)));
            }
            Resource resource = get(path);
            if (resource instanceof Collection) {
                String[] existingChildren = ((Collection) resource).getChildren();
                for (String existingChild : existingChildren) {
                    delete(existingChild);
                }
            }
            return;
        }
    } while (!xmlReader.isStartElement() && xmlReader.hasNext());

    int i = 0;
    if (xmlReader.hasNext() && xmlReader.getLocalName().equals(DumpConstants.RESOURCE)) {
        Set<String> childPathSet = new HashSet<String>();
        while (true) {
            if (i != 0) {
                dumpReader.setReadingChildResourceIndex(i);

                // otherwise we will set the stuff for the next resource
                // get an xlm reader in the checking child by parent mode.
                xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(dumpReader);

                while (!xmlReader.isStartElement() && xmlReader.hasNext()) {
                    xmlReader.next();
                }
            }

            String absoluteChildPath;
            if (incomingParentPath != null) {
                // the code to support backward compatibility.
                // prepare the children absolute path
                String incomingChildPath = xmlReader.getAttributeValue(null, DumpConstants.RESOURCE_PATH);
                /*                    if (!incomingChildPath.startsWith(incomingParentPath)) {
                //break;
                                    }*/

                String relativeChildPath;
                if (incomingParentPath.equals(RegistryConstants.ROOT_PATH)) {
                    relativeChildPath = incomingChildPath;
                } else {
                    if (incomingParentPath.contains(incomingChildPath)) {
                        relativeChildPath = incomingChildPath.substring(incomingParentPath.length());
                    } else {
                        // this happens only at some custom editing of dump.xml
                        relativeChildPath = null;
                    }
                }
                if (relativeChildPath != null) {
                    if (path.equals(RegistryConstants.ROOT_PATH)) {
                        absoluteChildPath = relativeChildPath;
                    } else {
                        absoluteChildPath = path + relativeChildPath;
                    }
                } else {
                    String checkoutRoot = path.substring(0, path.length() - incomingParentPath.length());
                    absoluteChildPath = checkoutRoot + incomingChildPath;
                }
            } else if (resourceName != null) {
                String childName = xmlReader.getAttributeValue(null, DumpConstants.RESOURCE_NAME);
                absoluteChildPath = path
                        + (path.equals(RegistryConstants.ROOT_PATH) ? "" : RegistryConstants.PATH_SEPARATOR)
                        + childName;
            } else {
                String msg = "Error in deriving the child paths for collection. path: " + path + ".";
                log.error(msg);
                throw new RegistryException(msg);
            }

            // we give the control back to the child.
            dumpReader.setCheckingChildByParent(false);

            dumpReader.setReadingChildResourceIndex(i);
            // call the check in method recursively

            recursionRepository.restoreRecursively(absoluteChildPath, dumpReader);
            childPathSet.add(absoluteChildPath);

            dumpReader.setCheckingChildByParent(true);
            try {
                if (dumpReader.isLastResource(i)) {
                    dumpReader.setCheckingChildByParent(false);
                    break;
                }
            } catch (IOException e) {
                String msg = "Error in checking the last resource exists.";
                log.error(msg, e);
                throw new RegistryException(msg + e.getMessage(), e);
            }
            // by this time i ++ child resource should exist
            i++;
        }
        Collection parent = (Collection) get(path);
        String[] existingChildren = parent.getChildren();
        for (String existingChild : existingChildren) {
            if (!childPathSet.contains(existingChild)) {
                delete(existingChild);
            }
        }
    }
}