package com.rectang.xsm.site.upgrades; import com.rectang.xsm.site.*; import com.rectang.xsm.io.XSMDocument; import java.util.Iterator; import java.util.List; import org.jdom.Element; public class Upgrade3 implements UpgradeUnit { public int getFromVersion() { return 3; } public int getToVersion() { return 4; } public String getTitle() { return "Add comments to gallery images"; } public boolean upgrade( Site site ) { Iterator pages = site.getAllPages(); while ( pages.hasNext() ) { DocumentPage next = (DocumentPage) pages.next(); try { XSMDocument doc = next.getXSMDocument(); Element gallery = doc.getContentElement(); if ( gallery.getName().equals( "gallery" ) ) { System.out.println( "upgrade 3 (gallery) - " + doc.getPath() ); upgradeGallery( gallery, doc ); } else if ( gallery.getName().equals( "book" ) || gallery.getName().equals( "html" ) ) { System.out.println( "upgrade 3 (html / book) - " + doc.getPath() ); upgradeGallery( gallery.getChild( "images" ), doc ); } } catch ( Exception e ) { System.err.println( "Failed on file " + next.getPath() + e.getMessage() ); return false; } } return true; } private void upgradeGallery( Element gallery, XSMDocument doc ) { List items = gallery.getChildren( "image" ); if ( items == null || items.size() == 0 ) { return; } Iterator itemIter = items.iterator(); while ( itemIter.hasNext() ) { Element nextItem = (Element) itemIter.next(); int index = nextItem.indexOf( nextItem.getChild( "caption" ) ); Element comments; nextItem.addContent( ++index, comments = new Element( "comments" ) ); comments.setAttribute( "next_index", "1" ); } doc.save(); } }