Java tutorial
/* * 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; } }