package com.rectang.xsm.pages.admin.xsm;
import com.rectang.xsm.AccessControl;
import com.rectang.xsm.XSM;
import com.rectang.xsm.pages.Secure;
import com.rectang.xsm.pages.XSMPage;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import java.util.*;
/**
* A setup wizard that checks all system configurations
*
* @author Andrew Williams
* @version $Id: Setup.java 833 2011-09-26 22:00:00Z andy $
* @since 2.0
*/
public class Setup
extends XSMPage
implements Secure
{
static List setupTasks = new ArrayList();
static
{
setupTasks.add( new SetupTask( "Check /etc/xsm exists" )
{
public Boolean run()
{
return new Boolean( new java.io.File( "/etc/xsm" ).exists() );
}
} );
setupTasks.add( new SetupTask( "Check /etc/xsm is writable" )
{
public Boolean run()
{
return new Boolean( new java.io.File( "/etc/xsm" ).canWrite() );
}
} );
}
public Setup( PageParameters parameters )
{
super( parameters );
}
static abstract class SetupTask
{
private String description;
protected SetupTask( String description )
{
this.description = description;
}
public abstract Boolean run();
public String getDescription()
{
return description;
}
}
public int getLevel()
{
return AccessControl.ADMIN;
}
public void layout()
{
super.layout();
final List results = runSetup();
add( new ListView( "status-output", results )
{
protected void populateItem( ListItem listItem )
{
Boolean ok = (Boolean) listItem.getModelObject();
SetupTask task = (SetupTask) setupTasks.get( listItem.getIndex() );
if ( ok.equals( Boolean.TRUE ) )
{
listItem.add( new Image( "icon", new ResourceReference( XSM.class, "icons/emblem-default.png" ) ) );
}
else
{
listItem.add( new Image( "icon", new ResourceReference( XSM.class, "icons/emblem-important.png" ) ) );
}
listItem.add( new Label( "description", task.getDescription() ) );
}
} );
Boolean passed = (Boolean) results.get( results.size() - 1 );
if ( passed.equals( Boolean.TRUE ) )
{
add( new Image( "icon", new ResourceReference( XSM.class, "icons/emblem-default.png" ) ) );
add( new Label( "summary", "OK - everything is fine!" ) );
}
else
{
add( new Image( "icon", new ResourceReference( XSM.class, "icons/emblem-important.png" ) ) );
add( new Label( "summary", "Oh no, there seems to be a problem - please ensure you have extracted the supplied " +
"xsm-demo-config.zip file to /etc/xsm and that it is writable by this server process" ) );
}
}
protected List runSetup()
{
List ret = new ArrayList();
for ( int i = 0; i < setupTasks.size(); i++ )
{
Boolean result = ((SetupTask) setupTasks.get( i )).run();
ret.add( result );
if ( result.equals( Boolean.FALSE ) )
{
break;
}
}
return ret;
}
}