org.mongeez.reader.XmlChangeSetReader.java Source code

Java tutorial

Introduction

Here is the source code for org.mongeez.reader.XmlChangeSetReader.java

Source

/*
 * Copyright 2011 SecondMarket Labs, LLC.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at  http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and limitations under the License.
 */

package org.mongeez.reader;

import org.mongeez.commands.ChangeSet;
import org.mongeez.commands.ChangeSetList;
import org.mongeez.commands.Script;

import org.apache.commons.digester3.Digester;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class XmlChangeSetReader implements ChangeSetReader {
    private static final Logger logger = LoggerFactory.getLogger(XmlChangeSetReader.class);

    private Digester digester;

    XmlChangeSetReader() {
        digester = new Digester();

        digester.setValidating(false);

        digester.addObjectCreate("mongoChangeLog", ChangeSetList.class);
        digester.addObjectCreate("mongoChangeLog/changeSet", ChangeSet.class);
        digester.addSetProperties("mongoChangeLog/changeSet");
        digester.addSetNext("mongoChangeLog/changeSet", "add");

        digester.addObjectCreate("mongoChangeLog/changeSet/script", Script.class);
        digester.addBeanPropertySetter("mongoChangeLog/changeSet/script", "body");
        digester.addSetNext("mongoChangeLog/changeSet/script", "add");
    }

    @Override
    public boolean supports(Resource file) {
        return true;
    }

    @Override
    public List<ChangeSet> getChangeSets(Resource file) {
        List<ChangeSet> changeSets = new ArrayList<ChangeSet>();

        try {
            logger.info("Parsing XML Change Set File {}", file.getFilename());
            ChangeSetList changeFileSet = (ChangeSetList) digester.parse(file.getInputStream());
            if (changeFileSet == null) {
                logger.warn("Ignoring change file {}, the parser returned null. Please check your formatting.",
                        file.getFilename());
            } else {
                for (ChangeSet changeSet : changeFileSet.getList()) {
                    ChangeSetReaderUtil.populateChangeSetResourceInfo(changeSet, file);
                }
                changeSets.addAll(changeFileSet.getList());
            }
        } catch (IOException e) {
            logger.error("IOException", e);
        } catch (org.xml.sax.SAXException e) {
            logger.error("SAXException", e);
        }
        return changeSets;
    }
}