XML dumps code clean-up

* Moved empire summary generator to a separate package, moved all empire
summary data classes to a sub-package of the former

* All row mappers for empire summary contents have been moved to
separate classes with default access

* Added comments to the component and to the mapper classes
This commit is contained in:
Emmanuel BENOîT 2012-01-17 10:50:51 +01:00
parent 2adc754a2c
commit 426a1fdfd4
24 changed files with 557 additions and 254 deletions

View file

@ -1,240 +0,0 @@
package com.deepclone.lw.beans.bt;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import com.deepclone.lw.beans.bt.esdata.*;
import com.deepclone.lw.interfaces.bt.EmpireSummary;
import com.thoughtworks.xstream.XStream;
public class EmpireSummaryBean
implements EmpireSummary
{
private JdbcTemplate dTemplate;
private final XStream xStream;
private final RowMapper< DebugInformation > mMainInfo;
private final RowMapper< ResearchInformation > mResearch;
private final RowMapper< PlanetInformation > mPlanet;
private final RowMapper< QueueItemInformation > mQueueItem;
private final RowMapper< BuildingsInformation > mBuildings;
private final RowMapper< FleetInformation > mFleet;
private final RowMapper< ShipsInformation > mShips;
public EmpireSummaryBean( )
{
this.xStream = new XStream( );
this.xStream.processAnnotations( new Class< ? >[] {
AccountInformation.class , AllianceInformation.class , BuildingsInformation.class ,
DebugInformation.class , EmpireInformation.class , FleetInformation.class , MovementInformation.class ,
PlanetInformation.class , QueueInformation.class , QueueItemInformation.class ,
ResearchInformation.class , ShipsInformation.class , SystemInformation.class
} );
this.mMainInfo = new RowMapper< DebugInformation >( ) {
@Override
public DebugInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
DebugInformation di = new DebugInformation( );
di.getSystem( ).setNextTick( rs.getLong( "next_tick" ) );
di.getSystem( ).setCurrentTick( (Long) rs.getObject( "current_tick" ) );
di.getAccount( ).setId( rs.getInt( "account_id" ) );
di.getAccount( ).setAddress( rs.getString( "account_address" ) );
di.getAccount( ).setGameCredits( rs.getInt( "game_credits" ) );
di.getAccount( ).setStatus( rs.getString( "account_status" ) );
di.getAccount( ).setLanguage( rs.getString( "account_language" ) );
di.getEmpire( ).setId( rs.getInt( "empire_id" ) );
di.getEmpire( ).setName( rs.getString( "empire_name" ) );
di.getEmpire( ).setCash( rs.getDouble( "cash" ) );
String allianceTag = rs.getString( "alliance_tag" );
if ( allianceTag != null ) {
AllianceInformation alliance = new AllianceInformation( );
alliance.setId( rs.getInt( "alliance_id" ) );
alliance.setTag( allianceTag );
alliance.setPending( rs.getBoolean( "alliance_pending" ) );
di.getEmpire( ).setAlliance( alliance );
}
return di;
}
};
this.mResearch = new RowMapper< ResearchInformation >( ) {
@Override
public ResearchInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
ResearchInformation ri = new ResearchInformation( );
ri.setId( rs.getInt( "line_id" ) );
ri.setCurrentLevel( rs.getInt( "level" ) );
ri.setLevelName( rs.getString( "name" ) );
ri.setAccumulated( rs.getDouble( "accumulated" ) );
return ri;
}
};
this.mPlanet = new RowMapper< PlanetInformation >( ) {
@Override
public PlanetInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
PlanetInformation pi = new PlanetInformation( );
pi.setId( rs.getInt( "planet_id" ) );
pi.setPopulation( rs.getDouble( "population" ) );
pi.setCurrentHappiness( rs.getDouble( "current_happiness" ) );
pi.setTargetHappiness( rs.getDouble( "target_happiness" ) );
pi.getCivilianQueue( ).setAccMoney( rs.getDouble( "civ_money" ) );
pi.getCivilianQueue( ).setAccWork( rs.getDouble( "civ_work" ) );
pi.getMilitaryQueue( ).setAccMoney( rs.getDouble( "mil_money" ) );
pi.getMilitaryQueue( ).setAccWork( rs.getDouble( "mil_work" ) );
return pi;
}
};
this.mQueueItem = new RowMapper< QueueItemInformation >( ) {
@Override
public QueueItemInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
QueueItemInformation qii = new QueueItemInformation( );
qii.setPlanetId( rs.getInt( "planet_id" ) );
qii.setMilitary( rs.getBoolean( "military" ) );
qii.setId( rs.getInt( "item_id" ) );
qii.setName( rs.getString( "item_name" ) );
qii.setDestroy( rs.getBoolean( "destroy" ) );
qii.setAmount( rs.getInt( "amount" ) );
return qii;
}
};
this.mBuildings = new RowMapper< BuildingsInformation >( ) {
@Override
public BuildingsInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
BuildingsInformation bi = new BuildingsInformation( );
bi.setPlanetId( rs.getInt( "planet_id" ) );
bi.setId( rs.getInt( "building_id" ) );
bi.setName( rs.getString( "building_name" ) );
bi.setAmount( rs.getInt( "amount" ) );
bi.setDamage( rs.getDouble( "damage" ) );
return bi;
}
};
this.mFleet = new RowMapper< FleetInformation >( ) {
@Override
public FleetInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
FleetInformation fi = new FleetInformation( );
fi.setId( rs.getLong( "fleet_id" ) );
fi.setName( rs.getString( "fleet_name" ) );
fi.setStatus( rs.getString( "status" ) );
fi.setAttacking( rs.getBoolean( "attacking" ) );
fi.setLocationId( rs.getInt( "location_id" ) );
fi.setLocationName( rs.getString( "location_name" ) );
Integer sourceId = (Integer) rs.getObject( "source_id" );
if ( sourceId != null ) {
MovementInformation mi = new MovementInformation( );
mi.setSourceId( sourceId );
mi.setSourceName( rs.getString( "source_name" ) );
mi.setTimeLeft( rs.getInt( "time_left" ) );
mi.setStateTimeLeft( rs.getInt( "state_time_left" ) );
mi.setNearId( (Integer) rs.getObject( "ref_point_id" ) );
mi.setNearName( rs.getString( "ref_point_name" ) );
mi.setOutwards( (Boolean) rs.getObject( "outwards" ) );
mi.setPastRefPoint( (Boolean) rs.getObject( "past_ref_point" ) );
mi.setStartX( (Float) rs.getObject( "start_x" ) );
mi.setStartY( (Float) rs.getObject( "start_y" ) );
fi.setMovement( mi );
}
return fi;
}
};
this.mShips = new RowMapper< ShipsInformation >( ) {
@Override
public ShipsInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
ShipsInformation si = new ShipsInformation( );
si.setFleetId( rs.getLong( "fleet_id" ) );
si.setId( rs.getInt( "ship_id" ) );
si.setName( rs.getString( "ship_name" ) );
si.setAmount( rs.getInt( "amount" ) );
si.setDamage( rs.getDouble( "damage" ) );
return si;
}
};
}
@Autowired( required = true )
public void setDataSource( DataSource dataSource )
{
this.dTemplate = new JdbcTemplate( dataSource );
}
@Override
public String getSummary( int empireId )
{
String sql = "SELECT * FROM bugs.dump_main_view WHERE empire_id = ?";
DebugInformation di = this.dTemplate.queryForObject( sql , this.mMainInfo , empireId );
sql = "SELECT * FROM bugs.dump_research_view WHERE empire_id = ?";
for ( ResearchInformation ri : this.dTemplate.query( sql , this.mResearch , empireId ) ) {
di.getResearch( ).add( ri );
}
sql = "SELECT * FROM bugs.dump_planets_view WHERE empire_id = ?";
Map< Integer , PlanetInformation > planets = new HashMap< Integer , PlanetInformation >( );
for ( PlanetInformation pi : this.dTemplate.query( sql , this.mPlanet , empireId ) ) {
di.getPlanets( ).add( pi );
planets.put( pi.getId( ) , pi );
}
sql = "SELECT * FROM bugs.dump_queues_view WHERE empire_id = ? ORDER BY queue_order";
for ( QueueItemInformation qii : this.dTemplate.query( sql , this.mQueueItem , empireId ) ) {
PlanetInformation pi = planets.get( qii.getPlanetId( ) );
QueueInformation qi = ( qii.isMilitary( ) ? pi.getMilitaryQueue( ) : pi.getCivilianQueue( ) );
qi.getItems( ).add( qii );
}
sql = "SELECT * FROM bugs.dump_buildings_view WHERE empire_id = ?";
for ( BuildingsInformation bi : this.dTemplate.query( sql , this.mBuildings , empireId ) ) {
planets.get( bi.getPlanetId( ) ).getBuildings( ).add( bi );
}
sql = "SELECT * FROM bugs.dump_fleets_view WHERE empire_id = ?";
Map< Long , FleetInformation > fleets = new HashMap< Long , FleetInformation >( );
for ( FleetInformation fi : this.dTemplate.query( sql , this.mFleet , empireId ) ) {
di.getFleets( ).add( fi );
fleets.put( fi.getId( ) , fi );
}
sql = "SELECT * FROM bugs.dump_ships_view WHERE empire_id = ?";
for ( ShipsInformation si : this.dTemplate.query( sql , this.mShips , empireId ) ) {
fleets.get( si.getFleetId( ) ).getShips( ).add( si );
}
return this.xStream.toXML( di );
}
}

View file

@ -0,0 +1,44 @@
package com.deepclone.lw.beans.bt.es;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.deepclone.lw.beans.bt.es.data.BuildingsInformation;
/**
* Building information row mapper
*
* <p>
* Map rows from <code>bugs.dump_buildings_view</code> into {@link BuildingsInformation} instances.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*
*/
final class BuildingsInformationMapper
implements RowMapper< BuildingsInformation >
{
/**
* Map a row from <code>bugs.dump_buildings_view</code>
*
* <p>
* Generate and initialise a {@link BuildingsInformation} instance using the row's fields.
*/
@Override
public BuildingsInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
BuildingsInformation bi = new BuildingsInformation( );
bi.setPlanetId( rs.getInt( "planet_id" ) );
bi.setId( rs.getInt( "building_id" ) );
bi.setName( rs.getString( "building_name" ) );
bi.setAmount( rs.getInt( "amount" ) );
bi.setDamage( rs.getDouble( "damage" ) );
return bi;
}
}

View file

@ -0,0 +1,65 @@
package com.deepclone.lw.beans.bt.es;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.deepclone.lw.beans.bt.es.data.AllianceInformation;
import com.deepclone.lw.beans.bt.es.data.DebugInformation;
/**
* Top-level empire summary row mapper
*
* <p>
* This class maps an entry from the database's main empire summary view,
* <code>bugs.dump_main_view</code>, into a top-level {@link DebugInformation} instance.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*
*/
final class DebugInformationMapper
implements RowMapper< DebugInformation >
{
/**
* Map a row from <code>bugs.dump_main_view</code> into a {@link DebugInformation} instance
*
* <p>
* Converts the row into a {@link DebugInformation} instance containing system information,
* account information and empire information. If the row contains alliance information, add an
* {@link AllianceInformation} record to the empire information.
*/
@Override
public DebugInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
DebugInformation di = new DebugInformation( );
di.getSystem( ).setNextTick( rs.getLong( "next_tick" ) );
di.getSystem( ).setCurrentTick( (Long) rs.getObject( "current_tick" ) );
di.getAccount( ).setId( rs.getInt( "account_id" ) );
di.getAccount( ).setAddress( rs.getString( "account_address" ) );
di.getAccount( ).setGameCredits( rs.getInt( "game_credits" ) );
di.getAccount( ).setStatus( rs.getString( "account_status" ) );
di.getAccount( ).setLanguage( rs.getString( "account_language" ) );
di.getEmpire( ).setId( rs.getInt( "empire_id" ) );
di.getEmpire( ).setName( rs.getString( "empire_name" ) );
di.getEmpire( ).setCash( rs.getDouble( "cash" ) );
String allianceTag = rs.getString( "alliance_tag" );
if ( allianceTag != null ) {
AllianceInformation alliance = new AllianceInformation( );
alliance.setId( rs.getInt( "alliance_id" ) );
alliance.setTag( allianceTag );
alliance.setPending( rs.getBoolean( "alliance_pending" ) );
di.getEmpire( ).setAlliance( alliance );
}
return di;
}
}

View file

@ -0,0 +1,161 @@
package com.deepclone.lw.beans.bt.es;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import com.deepclone.lw.beans.bt.es.data.AccountInformation;
import com.deepclone.lw.beans.bt.es.data.AllianceInformation;
import com.deepclone.lw.beans.bt.es.data.BuildingsInformation;
import com.deepclone.lw.beans.bt.es.data.DebugInformation;
import com.deepclone.lw.beans.bt.es.data.EmpireInformation;
import com.deepclone.lw.beans.bt.es.data.FleetInformation;
import com.deepclone.lw.beans.bt.es.data.MovementInformation;
import com.deepclone.lw.beans.bt.es.data.PlanetInformation;
import com.deepclone.lw.beans.bt.es.data.QueueInformation;
import com.deepclone.lw.beans.bt.es.data.QueueItemInformation;
import com.deepclone.lw.beans.bt.es.data.ResearchInformation;
import com.deepclone.lw.beans.bt.es.data.ShipsInformation;
import com.deepclone.lw.beans.bt.es.data.SystemInformation;
import com.deepclone.lw.interfaces.bt.EmpireSummary;
import com.thoughtworks.xstream.XStream;
/**
* Empire XML summary generator
*
* <p>
* This component is used by the bug tracking system to generate XML dumps of an empire's state. It
* reads the necessary data from the database, convert it to XML dump record classes then serialises
* the whole thing through XStream.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*/
public class EmpireSummaryBean
implements EmpireSummary
{
/** JDBC access interface */
private JdbcTemplate dTemplate;
/** XStream instance used to serialise XML dumps */
private final XStream xStream;
/** Top-level row mapper */
private final DebugInformationMapper mMainInfo;
/** Empire research row mapper */
private final ResearchInformationMapper mResearch;
/** Empire-owned planet row mapper */
private final PlanetInformationMapper mPlanet;
/** Planet construction queue item row mapper */
private final QueueItemInformationMapper mQueueItem;
/** Planet buildings information mapper */
private final BuildingsInformationMapper mBuildings;
/** Fleet information row mapper */
private final FleetInformationMapper mFleet;
/** Fleet ships row mapper */
private final ShipsInformationMapper mShips;
/**
* Set up the {@link XStream} instance that generates the dumps as well as the necessary row
* mappers.
*/
public EmpireSummaryBean( )
{
this.xStream = new XStream( );
this.xStream.processAnnotations( new Class< ? >[] {
AccountInformation.class , AllianceInformation.class , BuildingsInformation.class ,
DebugInformation.class , EmpireInformation.class , FleetInformation.class , MovementInformation.class ,
PlanetInformation.class , QueueInformation.class , QueueItemInformation.class ,
ResearchInformation.class , ShipsInformation.class , SystemInformation.class
} );
this.mMainInfo = new DebugInformationMapper( );
this.mResearch = new ResearchInformationMapper( );
this.mPlanet = new PlanetInformationMapper( );
this.mQueueItem = new QueueItemInformationMapper( );
this.mBuildings = new BuildingsInformationMapper( );
this.mFleet = new FleetInformationMapper( );
this.mShips = new ShipsInformationMapper( );
}
/**
* Dependency injector that sets the data source
*
* @param dataSource
* the data source
*/
@Autowired( required = true )
public void setDataSource( DataSource dataSource )
{
this.dTemplate = new JdbcTemplate( dataSource );
}
/**
* Generate an empire's XML summary
*
* <p>
* Retrieve all information from the database, convert that information into XML dump record
* instances through row mappers, then convert the top-level record into XML using the
* component's {@link XStream} instance.
*/
@Override
public String getSummary( int empireId )
{
String sql = "SELECT * FROM bugs.dump_main_view WHERE empire_id = ?";
DebugInformation di = this.dTemplate.queryForObject( sql , this.mMainInfo , empireId );
sql = "SELECT * FROM bugs.dump_research_view WHERE empire_id = ?";
for ( ResearchInformation ri : this.dTemplate.query( sql , this.mResearch , empireId ) ) {
di.getResearch( ).add( ri );
}
sql = "SELECT * FROM bugs.dump_planets_view WHERE empire_id = ?";
Map< Integer , PlanetInformation > planets = new HashMap< Integer , PlanetInformation >( );
for ( PlanetInformation pi : this.dTemplate.query( sql , this.mPlanet , empireId ) ) {
di.getPlanets( ).add( pi );
planets.put( pi.getId( ) , pi );
}
sql = "SELECT * FROM bugs.dump_queues_view WHERE empire_id = ? ORDER BY queue_order";
for ( QueueItemInformation qii : this.dTemplate.query( sql , this.mQueueItem , empireId ) ) {
PlanetInformation pi = planets.get( qii.getPlanetId( ) );
QueueInformation qi = ( qii.isMilitary( ) ? pi.getMilitaryQueue( ) : pi.getCivilianQueue( ) );
qi.getItems( ).add( qii );
}
sql = "SELECT * FROM bugs.dump_buildings_view WHERE empire_id = ?";
for ( BuildingsInformation bi : this.dTemplate.query( sql , this.mBuildings , empireId ) ) {
planets.get( bi.getPlanetId( ) ).getBuildings( ).add( bi );
}
sql = "SELECT * FROM bugs.dump_fleets_view WHERE empire_id = ?";
Map< Long , FleetInformation > fleets = new HashMap< Long , FleetInformation >( );
for ( FleetInformation fi : this.dTemplate.query( sql , this.mFleet , empireId ) ) {
di.getFleets( ).add( fi );
fleets.put( fi.getId( ) , fi );
}
sql = "SELECT * FROM bugs.dump_ships_view WHERE empire_id = ?";
for ( ShipsInformation si : this.dTemplate.query( sql , this.mShips , empireId ) ) {
fleets.get( si.getFleetId( ) ).getShips( ).add( si );
}
return this.xStream.toXML( di );
}
}

View file

@ -0,0 +1,66 @@
package com.deepclone.lw.beans.bt.es;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.deepclone.lw.beans.bt.es.data.FleetInformation;
import com.deepclone.lw.beans.bt.es.data.MovementInformation;
/**
* Fleet information row mapper
*
* <p>
* This class is responsible for mapping rows from <code>bugs.dump_fleets_view</code> into
* {@link FleetInformation} instances.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*
*/
final class FleetInformationMapper
implements RowMapper< FleetInformation >
{
/**
* Map a row from <code>bugs.dump_fleets_view</code>
*
* <p>
* Generate a {@link FleetInformation} instance from the row's contents. If the row indicates
* that the fleet is moving, add a {@link MovementInformation} instance to the fleet information
* record.
*/
@Override
public FleetInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
FleetInformation fi = new FleetInformation( );
fi.setId( rs.getLong( "fleet_id" ) );
fi.setName( rs.getString( "fleet_name" ) );
fi.setStatus( rs.getString( "status" ) );
fi.setAttacking( rs.getBoolean( "attacking" ) );
fi.setLocationId( rs.getInt( "location_id" ) );
fi.setLocationName( rs.getString( "location_name" ) );
Integer sourceId = (Integer) rs.getObject( "source_id" );
if ( sourceId != null ) {
MovementInformation mi = new MovementInformation( );
mi.setSourceId( sourceId );
mi.setSourceName( rs.getString( "source_name" ) );
mi.setTimeLeft( rs.getInt( "time_left" ) );
mi.setStateTimeLeft( rs.getInt( "state_time_left" ) );
mi.setNearId( (Integer) rs.getObject( "ref_point_id" ) );
mi.setNearName( rs.getString( "ref_point_name" ) );
mi.setOutwards( (Boolean) rs.getObject( "outwards" ) );
mi.setPastRefPoint( (Boolean) rs.getObject( "past_ref_point" ) );
mi.setStartX( (Float) rs.getObject( "start_x" ) );
mi.setStartY( (Float) rs.getObject( "start_y" ) );
fi.setMovement( mi );
}
return fi;
}
}

View file

@ -0,0 +1,50 @@
package com.deepclone.lw.beans.bt.es;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.deepclone.lw.beans.bt.es.data.PlanetInformation;
/**
* Top-level planet information row mapper
*
* <p>
* This class maps rows from <code>bugs.dump_planets_view</code> into {@link PlanetInformation}
* instances.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*
*/
final class PlanetInformationMapper
implements RowMapper< PlanetInformation >
{
/**
* Map a row from <code>bugs.dump_planets_view</code>
*
* <p>
* Create a new {@link PlanetInformation} instance from the row's contents. The instance's
* civilian and military construction queues, while left mostly uninitialised, will have their
* money and work accumulators set.
*/
@Override
public PlanetInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
PlanetInformation pi = new PlanetInformation( );
pi.setId( rs.getInt( "planet_id" ) );
pi.setPopulation( rs.getDouble( "population" ) );
pi.setCurrentHappiness( rs.getDouble( "current_happiness" ) );
pi.setTargetHappiness( rs.getDouble( "target_happiness" ) );
pi.getCivilianQueue( ).setAccMoney( rs.getDouble( "civ_money" ) );
pi.getCivilianQueue( ).setAccWork( rs.getDouble( "civ_work" ) );
pi.getMilitaryQueue( ).setAccMoney( rs.getDouble( "mil_money" ) );
pi.getMilitaryQueue( ).setAccWork( rs.getDouble( "mil_work" ) );
return pi;
}
}

View file

@ -0,0 +1,46 @@
package com.deepclone.lw.beans.bt.es;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.deepclone.lw.beans.bt.es.data.QueueItemInformation;
/**
* Generic row mapper for construction queue items
*
* <p>
* This class is responsible for mapping rows from <code>bugs.dump_queues_view</code> into
* {@link QueueItemInformation} instances. These instances will be added to the right queue later.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*
*/
final class QueueItemInformationMapper
implements RowMapper< QueueItemInformation >
{
/**
* Map a row from <code>bugs.dump_queues_view</code>
*
* <p>
* Create a {@link QueueItemInformation} instance from the row's contents.
*/
@Override
public QueueItemInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
QueueItemInformation qii = new QueueItemInformation( );
qii.setPlanetId( rs.getInt( "planet_id" ) );
qii.setMilitary( rs.getBoolean( "military" ) );
qii.setId( rs.getInt( "item_id" ) );
qii.setName( rs.getString( "item_name" ) );
qii.setDestroy( rs.getBoolean( "destroy" ) );
qii.setAmount( rs.getInt( "amount" ) );
return qii;
}
}

View file

@ -0,0 +1,44 @@
package com.deepclone.lw.beans.bt.es;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.deepclone.lw.beans.bt.es.data.ResearchInformation;
/**
* Research information row mapper
*
* <p>
* This class maps rows from <code>bugs.dump_research_view</code> into {@link ResearchInformation}
* instances.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*
*/
final class ResearchInformationMapper
implements RowMapper< ResearchInformation >
{
/**
* Map a <code>bugs.dump_research_view</code> row
*
* <p>
* Create a {@link ResearchInformation} instance from the row's contents.
*/
@Override
public ResearchInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
ResearchInformation ri = new ResearchInformation( );
ri.setId( rs.getInt( "line_id" ) );
ri.setCurrentLevel( rs.getInt( "level" ) );
ri.setLevelName( rs.getString( "name" ) );
ri.setAccumulated( rs.getDouble( "accumulated" ) );
return ri;
}
}

View file

@ -0,0 +1,46 @@
package com.deepclone.lw.beans.bt.es;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.deepclone.lw.beans.bt.es.data.ShipsInformation;
/**
* Fleet ships information row mapper
*
* <p>
* This class is responsible for creating {@link ShipsInformation} instances from the contents of
* <code>bugs.dump_ships_view</code>.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*
*/
final class ShipsInformationMapper
implements RowMapper< ShipsInformation >
{
/**
* Map a row from <code>bugs.dump_ships_view</code>
*
* <p>
* Generate a {@link ShipsInformation} instance and initialise its fields based on the row's
* contents.
*/
@Override
public ShipsInformation mapRow( ResultSet rs , int rowNum )
throws SQLException
{
ShipsInformation si = new ShipsInformation( );
si.setFleetId( rs.getLong( "fleet_id" ) );
si.setId( rs.getInt( "ship_id" ) );
si.setName( rs.getString( "ship_name" ) );
si.setAmount( rs.getInt( "amount" ) );
si.setDamage( rs.getDouble( "damage" ) );
return si;
}
}

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -1,4 +1,4 @@
package com.deepclone.lw.beans.bt.esdata; package com.deepclone.lw.beans.bt.es.data;
import java.io.Serializable; import java.io.Serializable;

View file

@ -3,6 +3,6 @@
xsi:schemaLocation=" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="empireSummary" class="com.deepclone.lw.beans.bt.EmpireSummaryBean" /> <bean id="empireSummary" class="com.deepclone.lw.beans.bt.es.EmpireSummaryBean" />
</beans> </beans>

View file

@ -1,9 +1,30 @@
package com.deepclone.lw.interfaces.bt; package com.deepclone.lw.interfaces.bt;
/**
* Empire XML summary generator
*
* <p>
* This interface corresponds to the component which generates XML dumps of an empire's state to be
* included in bug reports.
*
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
*/
public interface EmpireSummary public interface EmpireSummary
{ {
/**
* Generate an empire's XML summary
*
* <p>
* This method retrieves all necessary data from the database and converts it into an XML dump
* to be used in the bug report.
*
* @param empireId
* the empire's identifier
*
* @return the XML summary of the empire's current state
*/
public String getSummary( int empireId ); public String getSummary( int empireId );
} }