Friday, June 17, 2011

Detecting Unsorted Spring Beans

I like my Spring Beans definition files to be sorted. So I wrote the following code. Eventually I might turn it into a JUnit test for my continuous integration server.
package play;

import java.io.IOException;
import java.util.ListIterator;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class UnsortedSpringBeans {

 public static void checkSortOrder(final String filename) throws JDOMException, IOException {
        System.out.println(filename);
        System.out.println("-------------------------------------------------");                  
        String lastBean = null;
        SAXBuilder parser = new SAXBuilder();
        Document doc = parser.build(filename);
        Element root = doc.getRootElement();
        @SuppressWarnings("unchecked")
  ListIterator children = root.getChildren().listIterator();
        while (children.hasNext()) {
          Element child = children.next();
          Attribute id = child.getAttribute("id");
          if (id == null) {
              System.out.println("Skipping    : " + child.getName());                  
           continue;
          }
          if (lastBean != null) {
              int cmpValue = id.getValue().compareTo(lastBean);
              if (cmpValue < 0) {
                  System.out.println("Out Of Order: " + id.getValue());                  
              } else {
                  System.out.println("              " + id.getValue());                  
              }
          } else {
              System.out.println("              " + id.getValue());                  
          }
          lastBean = id.getValue();
        }
        System.out.println("");
    }
    
    /**
     * @param args
     * @throws IOException 
     * @throws JDOMException 
     */
    public static void main(String[] args) throws JDOMException, IOException {
        checkSortOrder("config/bean-definition.xml");
        checkSortOrder("config/database-beans.xml");
        checkSortOrder("config/hypersonicContext.xml");
        checkSortOrder("config/url-processor-beans.xml");
    }

}
Post a Comment