You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SIPRP/trunk/siprp/update/UpdateList.java

105 lines
2.2 KiB

/*
* Updater.java
*
* Created on 26 de Setembro de 2006, 11:49
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package siprp.update;
import java.util.*;
import com.evolute.utils.*;
import com.evolute.utils.arrays.*;
import com.evolute.utils.db.*;
import com.evolute.utils.sql.*;
/**
*
* @author fpalma
*/
public class UpdateList
{
protected static final Update UPDATE_LIST[] =
new Update[]{ new siprp.update.updates.V6_1_To_V7_0(), new siprp.update.updates.V7_0_To_V7_1() };
protected static Executer EXECUTER;
protected static double version = -1;
/** Creates a new instance of Updater */
private UpdateList()
{
}
public static double getCurrentVersion()
throws Exception
{
if( version < 0 )
{
version = getVersion();
}
return version;
}
public static Update []getUpdates()
throws Exception
{
if( version < 0 )
{
version = getVersion();
}
Vector validUpdates = new Vector();
for( int n = 0; n < UPDATE_LIST.length; n++ )
{
if( version <= UPDATE_LIST[ n ].getStartVersion() )
{
validUpdates.add( UPDATE_LIST[ n ] );
}
}
return ( Update [] ) validUpdates.toArray( new Update[ validUpdates.size() ] );
}
protected static double getVersion()
throws Exception
{
DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER );
EXECUTER = dbm.getSharedExecuter();
try
{
return readVersion();
}
catch( Exception ex )
{
createVersionTable();
}
return readVersion();
}
protected static double readVersion()
throws Exception
{
Select select =
new Select( new String[]{ "version" },
new String[]{ "MAX(current_version)" },
null );
Virtual2DArray array = EXECUTER.executeQuery( select );
return ( ( Number ) array.get( 0, 0 ) ).doubleValue();
}
protected static void createVersionTable()
throws Exception
{
com.evolute.utils.sql.Update update =
new com.evolute.utils.sql.Update( "CREATE TABLE version( current_version float );" );
EXECUTER.executeQuery( update );
Insert insert =
new Insert( "version",
new Assignment[]{
new Assignment( new Field( "current_version" ), new Double( 0.1 ) ) } );
EXECUTER.executeQuery( insert );
}
}