package com.rectang.xsm.pages.admin;
import com.rectang.xsm.pages.XSMPage;
import com.rectang.xsm.pages.Secure;
import com.rectang.xsm.AccessControl;
import com.rectang.xsm.site.upgrades.UpgradeUnit;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import java.util.Iterator;
/**
* Page to handle the upgrading of old sites.
*
* @author Andrew Williams
* @version $Id: Upgrade.java 802 2009-05-16 17:25:24Z andy $
* @since 2.0
*/
public class Upgrade
extends XSMPage
implements Secure
{
public Upgrade( PageParameters parameters )
{
super( parameters );
}
public int getLevel()
{
return AccessControl.MEMBER;
}
public void layout()
{
super.layout();
com.rectang.xsm.site.Site site = getXSMSession().getSite();
boolean runUpgrade = getPageParameters().getString( "action", "" ).equals( "run" );
if ( runUpgrade )
{
StringBuffer status = new StringBuffer();
boolean success = doUpgrade( site, status );
Label intro = new Label( "intro", status.toString() );
intro.setEscapeModelStrings( false );
add( intro );
Label statusLabel = new Label( "status" );
if ( success )
{
statusLabel.setDefaultModel( new StringResourceModel( "intro.complete", statusLabel, null ) );
}
else
{
statusLabel.setDefaultModel( new StringResourceModel( "intro.failed", statusLabel, null ) );
}
add( statusLabel );
WebMarkupContainer upgrades = new WebMarkupContainer( "run-upgrade" );
upgrades.setVisible( false );
add( upgrades );
return;
}
boolean needsUpgrade = site.needsUpgrade();
boolean canUpgrade = getXSMSession().getUser().isSiteAdmin();
Label intro = new Label( "intro" );
if ( !needsUpgrade )
{
intro.setDefaultModel( new StringResourceModel( "intro.noupgrades", intro, null ) );
}
else
{
intro.setDefaultModel( new StringResourceModel( "intro", intro, new Model( site ) ) );
}
add( intro );
Label status = new Label( "status" );
if ( needsUpgrade )
{
if ( canUpgrade )
{
status.setDefaultModel( new StringResourceModel( "intro.status.list", status, null ) );
}
else
{
status.setDefaultModel( new StringResourceModel( "intro.status.noaccess", status, null ) );
}
}
else
{
status = new Label( "status", "" );
status.setVisible( false );
}
add( status );
WebMarkupContainer upgrades = new WebMarkupContainer( "run-upgrade" );
if ( needsUpgrade && canUpgrade )
{
upgrades.add( new ListView( "upgrade-items", com.rectang.xsm.site.Upgrade.listRequiredUpgrades( site ) )
{
public void populateItem( final ListItem item )
{
UpgradeUnit unit = (UpgradeUnit) item.getModelObject();
item.add( new Label( "title", unit.getTitle() ) );
}
} );
}
else
{
upgrades.setVisible( false );
}
add( upgrades );
}
private boolean doUpgrade( com.rectang.xsm.site.Site site, StringBuffer buffer )
{
buffer.append( "<p>Upgrade started...<br />\n" );
Iterator upgrades = com.rectang.xsm.site.Upgrade.listRequiredUpgrades( site ).iterator();
while ( upgrades.hasNext() )
{
UpgradeUnit upgrade = (UpgradeUnit) upgrades.next();
buffer.append( upgrade.getTitle() );
buffer.append( "... " );
if ( upgrade.upgrade( site ) )
{
site.setVersion( upgrade.getToVersion() );
buffer.append( "SUCCESS<br />\n" );
}
else
{
buffer.append( "FAILED!!!<br /><br />\n" );
buffer.append( "Upgrade failed, please contact your XSM administrator" );
buffer.append( " version stuck at <font color=\"red\">" );
buffer.append( site.getVersion() );
buffer.append( "</font><br />\n" );
break;
}
}
return site.save();
}
}