Removed old research system
* Removed all tables, views and functions * Removed references to old system in Java code, including old import tool * Replaced XML dump code
This commit is contained in:
parent
070d55dc05
commit
96c296e9d5
22 changed files with 345 additions and 705 deletions
|
@ -15,6 +15,11 @@
|
|||
<artifactId>xstream</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<artifactId>legacyworlds-server-beans-bt</artifactId>
|
||||
|
|
|
@ -21,7 +21,9 @@ 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.ResearchGraphInformation;
|
||||
import com.deepclone.lw.beans.bt.es.data.ResearchInformation;
|
||||
import com.deepclone.lw.beans.bt.es.data.ResearchLineInformation;
|
||||
import com.deepclone.lw.beans.bt.es.data.ResourceDeltaInformation;
|
||||
import com.deepclone.lw.beans.bt.es.data.ResourceProviderInformation;
|
||||
import com.deepclone.lw.beans.bt.es.data.ShipsInformation;
|
||||
|
@ -122,8 +124,8 @@ public class EmpireSummaryBean
|
|||
AccountInformation.class , AllianceInformation.class , BuildingsInformation.class ,
|
||||
DebugInformation.class , EmpireInformation.class , FleetInformation.class , MovementInformation.class ,
|
||||
PlanetInformation.class , QueueInformation.class , QueueItemInformation.class ,
|
||||
ResearchInformation.class , ResourceDeltaInformation.class , ResourceProviderInformation.class ,
|
||||
ShipsInformation.class , SystemInformation.class
|
||||
ResearchLineInformation.class , ResearchGraphInformation.class , ResourceDeltaInformation.class ,
|
||||
ResourceProviderInformation.class , ShipsInformation.class , SystemInformation.class
|
||||
} );
|
||||
|
||||
this.mMainInfo = new DebugInformationMapper( );
|
||||
|
|
|
@ -4,9 +4,12 @@ package com.deepclone.lw.beans.bt.es;
|
|||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.postgresql.util.PGobject;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import com.deepclone.lw.beans.bt.es.data.ResearchGraphInformation;
|
||||
import com.deepclone.lw.beans.bt.es.data.ResearchInformation;
|
||||
import com.deepclone.lw.beans.bt.es.data.TechnologyState;
|
||||
|
||||
|
||||
|
||||
|
@ -14,8 +17,8 @@ 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.
|
||||
* This class maps rows from <code>bugs.dump_research_view</code> into
|
||||
* {@link ResearchGraphInformation} instances.
|
||||
*
|
||||
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
|
||||
*
|
||||
|
@ -28,17 +31,19 @@ final class ResearchInformationMapper
|
|||
* Map a <code>bugs.dump_research_view</code> row
|
||||
*
|
||||
* <p>
|
||||
* Create a {@link ResearchInformation} instance from the row's contents.
|
||||
* Create a {@link ResearchGraphInformation} 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" ) );
|
||||
ResearchGraphInformation ri = new ResearchGraphInformation( );
|
||||
ri.setName( rs.getString( "name" ) );
|
||||
ri.setState( TechnologyState.valueOf( ( (PGobject) rs.getObject( "state" ) ).toString( ) ) );
|
||||
if ( ri.getState( ) == TechnologyState.RESEARCH ) {
|
||||
ri.setPoints( rs.getDouble( "points" ) );
|
||||
ri.setPriority( rs.getInt( "priority" ) );
|
||||
}
|
||||
return ri;
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@ package com.deepclone.lw.beans.bt.es.data;
|
|||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.LinkedList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
|
@ -28,13 +28,13 @@ public class DebugInformation
|
|||
private EmpireInformation empire = new EmpireInformation( );
|
||||
|
||||
@XStreamAlias( "research" )
|
||||
private List< ResearchInformation > research = new LinkedList< ResearchInformation >( );
|
||||
private List< ResearchInformation > research = new ArrayList< ResearchInformation >( );
|
||||
|
||||
@XStreamAlias( "planets" )
|
||||
private List< PlanetInformation > planets = new LinkedList< PlanetInformation >( );
|
||||
private List< PlanetInformation > planets = new ArrayList< PlanetInformation >( );
|
||||
|
||||
@XStreamAlias( "fleets" )
|
||||
private List< FleetInformation > fleets = new LinkedList< FleetInformation >( );
|
||||
private List< FleetInformation > fleets = new ArrayList< FleetInformation >( );
|
||||
|
||||
|
||||
public int getVersion( )
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.deepclone.lw.beans.bt.es.data;
|
|||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.LinkedList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
|
@ -59,7 +59,7 @@ public class PlanetInformation
|
|||
|
||||
/** List of buildings */
|
||||
@XStreamAlias( "buildings" )
|
||||
private final List< BuildingsInformation > buildings = new LinkedList< BuildingsInformation >( );
|
||||
private final List< BuildingsInformation > buildings = new ArrayList< BuildingsInformation >( );
|
||||
|
||||
/** Civilian construction queue */
|
||||
@XStreamAlias( "civ-queue" )
|
||||
|
@ -71,11 +71,11 @@ public class PlanetInformation
|
|||
|
||||
/** Planet resource deltas */
|
||||
@XStreamImplicit
|
||||
private final LinkedList< ResourceDeltaInformation > resourceDeltas = new LinkedList< ResourceDeltaInformation >( );
|
||||
private final ArrayList< ResourceDeltaInformation > resourceDeltas = new ArrayList< ResourceDeltaInformation >( );
|
||||
|
||||
/** List of resource providers */
|
||||
@XStreamImplicit( itemFieldName = "resource-provider" )
|
||||
private final LinkedList< ResourceProviderInformation > resourceProviders = new LinkedList< ResourceProviderInformation >( );
|
||||
private final ArrayList< ResourceProviderInformation > resourceProviders = new ArrayList< ResourceProviderInformation >( );
|
||||
|
||||
|
||||
/** @return the planet's identifier */
|
||||
|
@ -195,14 +195,14 @@ public class PlanetInformation
|
|||
|
||||
|
||||
/** @return the list of resource delta records */
|
||||
public LinkedList< ResourceDeltaInformation > getResourceDeltas( )
|
||||
public ArrayList< ResourceDeltaInformation > getResourceDeltas( )
|
||||
{
|
||||
return this.resourceDeltas;
|
||||
}
|
||||
|
||||
|
||||
/** @return the list of resource provider records */
|
||||
public LinkedList< ResourceProviderInformation > getResourceProviders( )
|
||||
public ArrayList< ResourceProviderInformation > getResourceProviders( )
|
||||
{
|
||||
return this.resourceProviders;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
package com.deepclone.lw.beans.bt.es.data;
|
||||
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Technology from the technology graph and associated state information
|
||||
*
|
||||
* <p>
|
||||
* This class represents the state of a technology from the B6M2+ technology graph for the empire
|
||||
* being dumped.
|
||||
*
|
||||
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
|
||||
*/
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "technology" )
|
||||
public class ResearchGraphInformation
|
||||
extends ResearchInformation
|
||||
{
|
||||
|
||||
/** The technology's name */
|
||||
@XStreamAsAttribute
|
||||
private String name;
|
||||
|
||||
/** The technology's state */
|
||||
@XStreamAsAttribute
|
||||
private TechnologyState state;
|
||||
|
||||
/**
|
||||
* The amount of accumulated research points, or <code>null</code> if the technology has been
|
||||
* researched
|
||||
*/
|
||||
@XStreamAsAttribute
|
||||
private Double points;
|
||||
|
||||
/** The research priority, or <code>null</code> if the technology has been researched */
|
||||
@XStreamAsAttribute
|
||||
private Integer priority;
|
||||
|
||||
|
||||
/**
|
||||
* Gets the technology's name.
|
||||
*
|
||||
* @return the technology's name
|
||||
*/
|
||||
public String getName( )
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the technology's name.
|
||||
*
|
||||
* @param name
|
||||
* the technology's new name
|
||||
*/
|
||||
public void setName( String name )
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the technology's state.
|
||||
*
|
||||
* @return the technology's state
|
||||
*/
|
||||
public TechnologyState getState( )
|
||||
{
|
||||
return this.state;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the technology's state.
|
||||
*
|
||||
* @param state
|
||||
* the technology's new state
|
||||
*/
|
||||
public void setState( TechnologyState state )
|
||||
{
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the amount of accumulated research points
|
||||
*
|
||||
* @return the amount of accumulated research points, or <code>null</code> if the technology has
|
||||
* been researched
|
||||
*/
|
||||
public Double getPoints( )
|
||||
{
|
||||
return this.points;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the amount of accumulated research points
|
||||
*
|
||||
* @param points
|
||||
* the amount of accumulated research points
|
||||
*/
|
||||
public void setPoints( Double points )
|
||||
{
|
||||
this.points = points;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the research priority
|
||||
*
|
||||
* @return the research priority, or <code>null</code> if the technology has been researched
|
||||
*/
|
||||
public Integer getPriority( )
|
||||
{
|
||||
return this.priority;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the research priority
|
||||
*
|
||||
* @param priority
|
||||
* the new research priority
|
||||
*/
|
||||
public void setPriority( Integer priority )
|
||||
{
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
}
|
|
@ -3,81 +3,23 @@ package com.deepclone.lw.beans.bt.es.data;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
|
||||
|
||||
|
||||
@XStreamAlias( "research-line" )
|
||||
public class ResearchInformation
|
||||
/**
|
||||
* Empty, base research record
|
||||
*
|
||||
* <p>
|
||||
* This class used to contain B6M1 research line entries; however, in order to support B6M2
|
||||
* technologies while maintaining XML compatibility, it has been replaced with an empty class which
|
||||
* servces as the base class for both old and new records.
|
||||
*
|
||||
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings( "serial" )
|
||||
public abstract class ResearchInformation
|
||||
implements Serializable
|
||||
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@XStreamAsAttribute
|
||||
@XStreamAlias( "line")
|
||||
private int id;
|
||||
|
||||
@XStreamAsAttribute
|
||||
@XStreamAlias( "level")
|
||||
private int currentLevel;
|
||||
|
||||
@XStreamAsAttribute
|
||||
@XStreamAlias( "name")
|
||||
private String levelName;
|
||||
|
||||
@XStreamAsAttribute
|
||||
@XStreamAlias( "accumulated-points")
|
||||
private double accumulated;
|
||||
|
||||
|
||||
public int getId( )
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
public void setId( int id )
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
|
||||
public int getCurrentLevel( )
|
||||
{
|
||||
return currentLevel;
|
||||
}
|
||||
|
||||
|
||||
public void setCurrentLevel( int currentLevel )
|
||||
{
|
||||
this.currentLevel = currentLevel;
|
||||
}
|
||||
|
||||
|
||||
public String getLevelName( )
|
||||
{
|
||||
return levelName;
|
||||
}
|
||||
|
||||
|
||||
public void setLevelName( String levelName )
|
||||
{
|
||||
this.levelName = levelName;
|
||||
}
|
||||
|
||||
|
||||
public double getAccumulated( )
|
||||
{
|
||||
return accumulated;
|
||||
}
|
||||
|
||||
|
||||
public void setAccumulated( double accumulated )
|
||||
{
|
||||
this.accumulated = accumulated;
|
||||
}
|
||||
|
||||
// EMPTY
|
||||
}
|
||||
|
|
|
@ -0,0 +1,137 @@
|
|||
package com.deepclone.lw.beans.bt.es.data;
|
||||
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Research line information
|
||||
*
|
||||
* <p>
|
||||
* This class defines data stored in the dumps for B6M1 research lines. It is no longer actively
|
||||
* used as of B6M2, but is kept around so the XML files can still be used if necessary.
|
||||
*
|
||||
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
|
||||
*/
|
||||
@XStreamAlias( "research-line" )
|
||||
public class ResearchLineInformation
|
||||
extends ResearchInformation
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** Identifier of the technology line */
|
||||
@XStreamAsAttribute
|
||||
@XStreamAlias( "line" )
|
||||
private int id;
|
||||
|
||||
/** Current level for that line */
|
||||
@XStreamAsAttribute
|
||||
@XStreamAlias( "level" )
|
||||
private int currentLevel;
|
||||
|
||||
/** Name of the last level */
|
||||
@XStreamAsAttribute
|
||||
@XStreamAlias( "name" )
|
||||
private String levelName;
|
||||
|
||||
/** Accumulated points towards the next level */
|
||||
@XStreamAsAttribute
|
||||
@XStreamAlias( "accumulated-points" )
|
||||
private double accumulated;
|
||||
|
||||
|
||||
/**
|
||||
* Gets the identifier of the technology line.
|
||||
*
|
||||
* @return the identifier of the technology line
|
||||
*/
|
||||
public int getId( )
|
||||
{
|
||||
return this.id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the identifier of the technology line.
|
||||
*
|
||||
* @param id
|
||||
* the new identifier of the technology line
|
||||
*/
|
||||
public void setId( int id )
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the current level for that line.
|
||||
*
|
||||
* @return the current level for that line
|
||||
*/
|
||||
public int getCurrentLevel( )
|
||||
{
|
||||
return this.currentLevel;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the current level for that line.
|
||||
*
|
||||
* @param currentLevel
|
||||
* the new level for that line
|
||||
*/
|
||||
public void setCurrentLevel( int currentLevel )
|
||||
{
|
||||
this.currentLevel = currentLevel;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the name of the last level.
|
||||
*
|
||||
* @return the name of the last level
|
||||
*/
|
||||
public String getLevelName( )
|
||||
{
|
||||
return this.levelName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the name of the last level.
|
||||
*
|
||||
* @param levelName
|
||||
* the new name of the last level
|
||||
*/
|
||||
public void setLevelName( String levelName )
|
||||
{
|
||||
this.levelName = levelName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the accumulated points towards the next level.
|
||||
*
|
||||
* @return the accumulated points towards the next level
|
||||
*/
|
||||
public double getAccumulated( )
|
||||
{
|
||||
return this.accumulated;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the accumulated points towards the next level.
|
||||
*
|
||||
* @param accumulated
|
||||
* the new accumulated points towards the next level
|
||||
*/
|
||||
public void setAccumulated( double accumulated )
|
||||
{
|
||||
this.accumulated = accumulated;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.deepclone.lw.beans.bt.es.data;
|
||||
|
||||
|
||||
/**
|
||||
* State of a (B6M2+) technology
|
||||
*
|
||||
* @author <a href="mailto:tseeker@legacyworlds.com">E. Benoît</a>
|
||||
*/
|
||||
public enum TechnologyState {
|
||||
|
||||
/** The technology is being researched */
|
||||
RESEARCH ,
|
||||
|
||||
/** The technology needs to be implemented */
|
||||
PENDING ,
|
||||
|
||||
/** The technology has been researched and implemented */
|
||||
KNOWN
|
||||
|
||||
}
|
|
@ -103,7 +103,7 @@ public class ConstantsRegistrarBean
|
|||
// Work and income
|
||||
String[] wcNames = {
|
||||
"population" , "factory" , "strikeEffect" , "wuPerPopUnit" , "destructionRecovery" , "destructionWork" ,
|
||||
"rpPerPopUnit" , "cancelRecovery"
|
||||
"cancelRecovery"
|
||||
};
|
||||
for ( int i = 0 ; i < wcNames.length ; i++ ) {
|
||||
wcNames[ i ] = "game.work." + wcNames[ i ];
|
||||
|
@ -121,10 +121,8 @@ public class ConstantsRegistrarBean
|
|||
defs.add( new ConstantDefinition( wcNames[ 4 ] , cat , cDesc , 0.1 , 0.01 , 0.99 ) );
|
||||
cDesc = "Proportion of a building's construction work units required to destroy it";
|
||||
defs.add( new ConstantDefinition( wcNames[ 5 ] , cat , cDesc , 0.25 , 0.01 , 1.0 ) );
|
||||
cDesc = "Research points per population unit.";
|
||||
defs.add( new ConstantDefinition( wcNames[ 6 ] , cat , cDesc , 0.50 , 0.01 , true ) );
|
||||
cDesc = "Proportion of queue investments that is recovered when flushing the queue.";
|
||||
defs.add( new ConstantDefinition( wcNames[ 7 ] , cat , cDesc , 0.1 , 0.01 , 1.0 ) );
|
||||
defs.add( new ConstantDefinition( wcNames[ 6 ] , cat , cDesc , 0.1 , 0.01 , 1.0 ) );
|
||||
|
||||
// Research
|
||||
String[] rcNames = {
|
||||
|
@ -158,8 +156,6 @@ public class ConstantsRegistrarBean
|
|||
defs.add( new ConstantDefinition( "vacation.cost" , "Vacation mode" , cDesc , 3.0 , 2.0 , 20.0 ) );
|
||||
cDesc = "Income/upkeep divider used when vacation mode is active.";
|
||||
defs.add( new ConstantDefinition( "vacation.cashDivider" , "Vacation mode" , cDesc , 3.0 , 1.1 , 10.0 ) );
|
||||
cDesc = "Research points divider used when vacation mode is active.";
|
||||
defs.add( new ConstantDefinition( "vacation.researchDivider" , "Vacation mode" , cDesc , 10.0 , 1.1 , 50.0 ) );
|
||||
|
||||
// Map names
|
||||
cDesc = "Minimal delay between map object renaming.";
|
||||
|
|
|
@ -161,56 +161,3 @@ ALTER TABLE defs.techdep_cache
|
|||
REFERENCES defs.techdep_cache( technology_name_id , tdcache_reverse , tdcache_id )
|
||||
ON DELETE CASCADE;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Old B6M1 research system below.
|
||||
*/
|
||||
|
||||
--
|
||||
-- Technology lines
|
||||
--
|
||||
|
||||
CREATE TABLE tech.lines(
|
||||
name_id INT NOT NULL PRIMARY KEY ,
|
||||
description_id INT NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX idx_lines_description
|
||||
ON tech.lines (description_id);
|
||||
|
||||
ALTER TABLE tech.lines
|
||||
ADD CONSTRAINT fk_lines_name
|
||||
FOREIGN KEY (name_id) REFERENCES defs.strings ,
|
||||
ADD CONSTRAINT fk_lines_description
|
||||
FOREIGN KEY (description_id) REFERENCES defs.strings;
|
||||
|
||||
|
||||
--
|
||||
-- Technology levels
|
||||
--
|
||||
|
||||
CREATE TABLE tech.levels(
|
||||
id SERIAL NOT NULL PRIMARY KEY ,
|
||||
line_id INT NOT NULL ,
|
||||
level INT NOT NULL CHECK( level > 0 ) ,
|
||||
name_id INT NOT NULL ,
|
||||
description_id INT NOT NULL ,
|
||||
points INT NOT NULL CHECK( points > 0 ) ,
|
||||
cost INT NOT NULL CHECK( cost > 0 )
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX idx_levels_linelevel
|
||||
ON tech.levels (line_id, level);
|
||||
CREATE INDEX idx_levels_name
|
||||
ON tech.levels (name_id);
|
||||
CREATE INDEX idx_levels_description
|
||||
ON tech.levels (description_id);
|
||||
|
||||
ALTER TABLE tech.levels
|
||||
ADD CONSTRAINT fk_levels_line
|
||||
FOREIGN KEY (line_id) REFERENCES tech.lines ,
|
||||
ADD CONSTRAINT fk_levels_name
|
||||
FOREIGN KEY (name_id) REFERENCES defs.strings ,
|
||||
ADD CONSTRAINT fk_levels_description
|
||||
FOREIGN KEY (description_id) REFERENCES defs.strings;
|
||||
|
|
|
@ -32,25 +32,6 @@ ALTER TABLE tech.buildables
|
|||
FOREIGN KEY (technology_name_id) REFERENCES defs.technologies;
|
||||
|
||||
|
||||
--
|
||||
-- Requirements
|
||||
--
|
||||
CREATE TABLE tech.buildable_requirements(
|
||||
buildable_id INT NOT NULL ,
|
||||
level_id INT NOT NULL ,
|
||||
PRIMARY KEY( buildable_id , level_id )
|
||||
);
|
||||
|
||||
CREATE INDEX idx_buildablereqs_level
|
||||
ON tech.buildable_requirements( level_id );
|
||||
|
||||
ALTER TABLE tech.buildable_requirements
|
||||
ADD CONSTRAINT fk_buildablereqs_buildable
|
||||
FOREIGN KEY (buildable_id) REFERENCES tech.buildables ,
|
||||
ADD CONSTRAINT fk_buildablereqs_level
|
||||
FOREIGN KEY (level_id) REFERENCES tech.levels;
|
||||
|
||||
|
||||
--
|
||||
-- Buildings
|
||||
--
|
||||
|
|
|
@ -146,32 +146,6 @@ ALTER TABLE emp.technologies_v2
|
|||
FOREIGN KEY ( technology_name_id ) REFERENCES defs.technologies;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Empire technologies
|
||||
--
|
||||
|
||||
CREATE TABLE emp.technologies(
|
||||
empire_id INT NOT NULL ,
|
||||
line_id INT NOT NULL ,
|
||||
level INT NOT NULL DEFAULT 1
|
||||
CHECK( level > 0 ) ,
|
||||
accumulated REAL NOT NULL DEFAULT 0
|
||||
CHECK( accumulated >= 0 ),
|
||||
PRIMARY KEY( empire_id , line_id )
|
||||
);
|
||||
|
||||
CREATE INDEX idx_technologies_line
|
||||
ON emp.technologies (line_id);
|
||||
|
||||
ALTER TABLE emp.technologies
|
||||
ADD CONSTRAINT fk_technologies_empire
|
||||
FOREIGN KEY (empire_id) REFERENCES emp.empires
|
||||
ON DELETE CASCADE ,
|
||||
ADD CONSTRAINT fk_technologies_line
|
||||
FOREIGN KEY (line_id) REFERENCES tech.lines;
|
||||
|
||||
|
||||
--
|
||||
-- Empire planets
|
||||
--
|
||||
|
|
|
@ -83,28 +83,6 @@ ALTER TABLE events.bqe_locations
|
|||
FOREIGN KEY (location_id) REFERENCES verse.planets;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Empire events
|
||||
--
|
||||
|
||||
CREATE TABLE events.empire_events(
|
||||
event_id BIGINT NOT NULL PRIMARY KEY ,
|
||||
technology_id INT NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX idx_empevents_tech
|
||||
ON events.empire_events (technology_id);
|
||||
|
||||
ALTER TABLE events.empire_events
|
||||
ADD CONSTRAINT fk_empevents_event
|
||||
FOREIGN KEY (event_id) REFERENCES events.events
|
||||
ON DELETE CASCADE,
|
||||
ADD CONSTRAINT fk_empevents_tech
|
||||
FOREIGN KEY (technology_id) REFERENCES tech.levels;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Fleet events
|
||||
--
|
||||
|
|
|
@ -404,95 +404,6 @@ CREATE VIEW tech.ships_view
|
|||
ON b.name_id = s.buildable_id;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Creates or updates a technology line
|
||||
--
|
||||
-- Parameters:
|
||||
-- tln Tech line name
|
||||
-- tld Tech line description
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION tech.uoc_line( tln TEXT , tld TEXT )
|
||||
RETURNS VOID
|
||||
STRICT
|
||||
VOLATILE
|
||||
SECURITY DEFINER
|
||||
AS $$
|
||||
DECLARE
|
||||
nid INT;
|
||||
did INT;
|
||||
BEGIN
|
||||
-- Get string identifiers
|
||||
SELECT INTO nid id FROM defs.strings WHERE name = tln;
|
||||
SELECT INTO did id FROM defs.strings WHERE name = tld;
|
||||
|
||||
-- Try creating / updating
|
||||
BEGIN
|
||||
INSERT INTO tech.lines ( name_id , description_id )
|
||||
VALUES ( nid , did );
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
UPDATE tech.lines SET description_id = did
|
||||
WHERE name_id = nid;
|
||||
END;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
GRANT EXECUTE ON FUNCTION tech.uoc_line( TEXT , TEXT ) TO :dbuser;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Creates or updates a technology level
|
||||
--
|
||||
-- Parameters:
|
||||
-- tln Tech line name
|
||||
-- lv Level
|
||||
-- lvn Level name
|
||||
-- lvd Level description
|
||||
-- lvp Points
|
||||
-- lvc Cost
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION tech.uoc_level( tln TEXT , lv INT , lvn TEXT , lvd TEXT , lvp INT , lvc INT )
|
||||
RETURNS VOID
|
||||
STRICT
|
||||
VOLATILE
|
||||
SECURITY DEFINER
|
||||
AS $$
|
||||
DECLARE
|
||||
lid INT;
|
||||
nid INT;
|
||||
did INT;
|
||||
BEGIN
|
||||
-- Get tech line
|
||||
SELECT INTO lid t.name_id
|
||||
FROM tech.lines t
|
||||
INNER JOIN defs.strings s
|
||||
ON s.id = t.name_id
|
||||
WHERE s.name = tln;
|
||||
|
||||
-- Get name / description IDs
|
||||
SELECT INTO nid id FROM defs.strings WHERE name = lvn;
|
||||
SELECT INTO did id FROM defs.strings WHERE name = lvd;
|
||||
|
||||
-- Create or update the level
|
||||
BEGIN
|
||||
INSERT INTO tech.levels ( line_id , level , name_id , description_id , points , cost )
|
||||
VALUES ( lid , lv , nid , did , lvp , lvc );
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
UPDATE tech.levels SET name_id = nid , description_id = did , points = lvp , cost = lvc
|
||||
WHERE line_id = lid AND level = lv;
|
||||
END;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
GRANT EXECUTE ON FUNCTION tech.uoc_level( TEXT , INT , TEXT , TEXT , INT , INT ) to :dbuser;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Creates or updates a buildable definition
|
||||
--
|
||||
|
|
|
@ -105,48 +105,6 @@ GRANT EXECUTE ON FUNCTION emp.get_current( INT ) TO :dbuser;
|
|||
|
||||
|
||||
|
||||
--
|
||||
-- Implements a technology (OLD VERSION)
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION emp.implement_tech( e_id INT , l_id INT )
|
||||
RETURNS VOID
|
||||
STRICT VOLATILE
|
||||
SECURITY DEFINER
|
||||
AS $$
|
||||
DECLARE
|
||||
e_cash REAL;
|
||||
lev INT;
|
||||
cost REAL;
|
||||
BEGIN
|
||||
SELECT INTO e_cash , lev , cost e.cash , et.level , tl.cost
|
||||
FROM emp.empires e
|
||||
INNER JOIN emp.technologies et
|
||||
ON et.line_id = l_id AND et.empire_id = e.name_id
|
||||
INNER JOIN tech.levels tl
|
||||
ON tl.line_id = l_id AND tl.level = et.level
|
||||
AND tl.points = floor( et.accumulated )
|
||||
AND tl.cost <= e.cash
|
||||
WHERE e.name_id = e_id
|
||||
FOR UPDATE OF e , et;
|
||||
|
||||
IF NOT FOUND THEN
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
UPDATE emp.empires
|
||||
SET cash = e_cash - cost
|
||||
WHERE name_id = e_id;
|
||||
UPDATE emp.technologies
|
||||
SET level = lev + 1 , accumulated = 0
|
||||
WHERE empire_id = e_id AND line_id = l_id;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
GRANT EXECUTE ON FUNCTION emp.implement_tech( INT , INT ) TO :dbuser;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Add an enemy empire
|
||||
--
|
||||
|
@ -628,50 +586,6 @@ CREATE VIEW emp.overview
|
|||
GRANT SELECT ON emp.overview TO :dbuser;
|
||||
|
||||
|
||||
--
|
||||
-- Empire tech lines
|
||||
--
|
||||
|
||||
CREATE VIEW emp.tech_lines_view
|
||||
AS SELECT e.name_id AS empire , tl.name_id AS tech_line ,
|
||||
t1.translated_string AS name ,
|
||||
t2.translated_string AS description
|
||||
FROM emp.empires e
|
||||
INNER JOIN emp.technologies et ON et.empire_id = e.name_id
|
||||
INNER JOIN tech.lines tl ON tl.name_id = et.line_id
|
||||
INNER JOIN naming.empire_names en ON en.id = e.name_id
|
||||
INNER JOIN users.credentials c ON c.address_id = en.owner_id
|
||||
INNER JOIN defs.translations t1 ON t1.string_id = tl.name_id AND t1.lang_id = c.language_id
|
||||
INNER JOIN defs.translations t2 ON t2.string_id = tl.description_id AND t2.lang_id = c.language_id
|
||||
ORDER BY t1.translated_string;
|
||||
|
||||
GRANT SELECT ON emp.tech_lines_view TO :dbuser;
|
||||
|
||||
|
||||
--
|
||||
-- Empire technologies
|
||||
--
|
||||
|
||||
CREATE VIEW emp.technologies_view
|
||||
AS SELECT e.name_id AS empire , tl.name_id AS tech_line ,
|
||||
t1.translated_string AS name ,
|
||||
t2.translated_string AS description ,
|
||||
( et.level > tlv.level ) AS implemented ,
|
||||
floor( 100 * et.accumulated / tlv.points ) AS progress ,
|
||||
tlv.cost AS cost
|
||||
FROM emp.empires e
|
||||
INNER JOIN emp.technologies et ON et.empire_id = e.name_id
|
||||
INNER JOIN tech.lines tl ON tl.name_id = et.line_id
|
||||
INNER JOIN tech.levels tlv ON tlv.line_id = tl.name_id AND tlv.level <= et.level
|
||||
INNER JOIN naming.empire_names en ON en.id = e.name_id
|
||||
INNER JOIN users.credentials c ON c.address_id = en.owner_id
|
||||
INNER JOIN defs.translations t1 ON t1.string_id = tlv.name_id AND t1.lang_id = c.language_id
|
||||
INNER JOIN defs.translations t2 ON t2.string_id = tlv.description_id AND t2.lang_id = c.language_id
|
||||
ORDER BY tl.name_id , tlv.level;
|
||||
|
||||
GRANT SELECT ON emp.technologies_view TO :dbuser;
|
||||
|
||||
|
||||
--
|
||||
-- Enemy lists
|
||||
--
|
||||
|
|
|
@ -228,32 +228,6 @@ $$ LANGUAGE plpgsql;
|
|||
|
||||
|
||||
|
||||
--
|
||||
-- Creates an event for a technology's availability
|
||||
--
|
||||
-- Parameters:
|
||||
-- e_id Empire identifier
|
||||
-- t_id Technology identifier
|
||||
--
|
||||
|
||||
CREATE OR REPLACE FUNCTION events.tech_ready_event( e_id INT , t_id INT )
|
||||
RETURNS VOID
|
||||
STRICT VOLATILE
|
||||
SECURITY INVOKER
|
||||
AS $$
|
||||
DECLARE
|
||||
evt_id BIGINT;
|
||||
BEGIN
|
||||
INSERT INTO events.events ( empire_id , tick , evt_type , evt_subtype , status )
|
||||
VALUES ( e_id , sys.get_tick( ) - 1 , 'EMPIRE' , 0 , 'READY' )
|
||||
RETURNING event_id INTO evt_id;
|
||||
INSERT INTO events.empire_events ( event_id , technology_id )
|
||||
VALUES ( evt_id , t_id );
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Creates an event for start/end of debt
|
||||
--
|
||||
|
@ -856,17 +830,6 @@ CREATE VIEW events.queue_events_view
|
|||
GRANT SELECT ON events.queue_events_view TO :dbuser;
|
||||
|
||||
|
||||
CREATE VIEW events.empire_events_view
|
||||
AS SELECT e.event_id AS id , e.evt_type , e.evt_subtype , e.tick , e.real_time , s.name AS technology
|
||||
FROM events.events e
|
||||
LEFT OUTER JOIN events.empire_events ed USING (event_id)
|
||||
LEFT OUTER JOIN tech.levels tl ON tl.id = ed.technology_id
|
||||
LEFT OUTER JOIN defs.strings s ON s.id = tl.name_id
|
||||
WHERE e.evt_type = 'EMPIRE';
|
||||
|
||||
GRANT SELECT ON events.empire_events_view TO :dbuser;
|
||||
|
||||
|
||||
CREATE VIEW events.fleets_events_view
|
||||
AS SELECT e.event_id AS id , e.evt_type , e.evt_subtype , e.tick , e.real_time ,
|
||||
ed.* , s.x , s.y , p.orbit
|
||||
|
|
|
@ -1196,11 +1196,10 @@ GRANT SELECT ON bugs.dump_main_view TO :dbuser;
|
|||
|
||||
|
||||
CREATE VIEW bugs.dump_research_view
|
||||
AS SELECT et.empire_id , et.line_id AS line_id , et.level AS level ,
|
||||
tst.name AS name , et.accumulated AS accumulated
|
||||
FROM emp.technologies et
|
||||
LEFT OUTER JOIN tech.levels tlv ON tlv.line_id = et.line_id AND tlv.level = et.level
|
||||
LEFT OUTER JOIN defs.strings tst ON tst.id = tlv.name_id;
|
||||
AS SELECT et.empire_id , tst.name AS name , et.emptech_state AS state ,
|
||||
et.emptech_points AS points , et.emptech_priority AS priority
|
||||
FROM emp.technologies_v2 et
|
||||
INNER JOIN defs.strings tst ON tst.id = et.technology_name_id;
|
||||
|
||||
GRANT SELECT ON bugs.dump_research_view TO :dbuser;
|
||||
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<technologies xmlns="http://www.deepclone.com/lw/b6/m1/techs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/techs techs.xsd">
|
||||
|
||||
<tech-line name="milTech" description="milTechDescription">
|
||||
<level name="cruisersTech" description="cruisersTechDescription"
|
||||
points="25000" cost="10000" />
|
||||
<level name="bCruisersTech" description="bCruisersTechDescription"
|
||||
points="900000" cost="400000" />
|
||||
<level name="dreadnoughtsTech" description="dreadnoughtsTechDescription"
|
||||
points="2250000" cost="1012500" />
|
||||
</tech-line>
|
||||
|
||||
<tech-line name="civTech" description="civTechDescription">
|
||||
<level name="indFactTech" description="indFactTechDescription"
|
||||
points="10000" cost="5000" />
|
||||
<level name="reanimationTech" description="reanimationTechDescription"
|
||||
points="562500" cost="281250" />
|
||||
<level name="superTurretTech" description="superTurretTechDescription"
|
||||
points="1350000" cost="607500" />
|
||||
</tech-line>
|
||||
|
||||
</technologies>
|
|
@ -1,28 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns="http://www.deepclone.com/lw/b6/m1/techs" targetNamespace="http://www.deepclone.com/lw/b6/m1/techs"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||
|
||||
<xs:element name="technologies">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="tech-line" type="tech-line" minOccurs="1" maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:complexType name="tech-line">
|
||||
<xs:sequence>
|
||||
<xs:element name="level" type="tech-level" minOccurs="1" maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" use="required" type="xs:token" />
|
||||
<xs:attribute name="description" use="required" type="xs:token" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="tech-level">
|
||||
<xs:attribute name="name" use="required" type="xs:token" />
|
||||
<xs:attribute name="description" use="required" type="xs:token" />
|
||||
<xs:attribute name="points" use="required" type="xs:positiveInteger" />
|
||||
<xs:attribute name="cost" use="required" type="xs:positiveInteger" />
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
|
@ -1,217 +0,0 @@
|
|||
package com.deepclone.lw.cli;
|
||||
|
||||
|
||||
import java.io.*;
|
||||
import java.sql.Types;
|
||||
import java.util.List;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.support.AbstractApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.context.support.FileSystemXmlApplicationContext;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.support.TransactionCallback;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import com.deepclone.lw.utils.StoredProc;
|
||||
import com.thoughtworks.xstream.XStream;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
import com.thoughtworks.xstream.annotations.XStreamImplicit;
|
||||
|
||||
|
||||
|
||||
public class ImportTechs
|
||||
extends CLITool
|
||||
{
|
||||
|
||||
private final Logger logger = Logger.getLogger( ImportTechs.class );
|
||||
|
||||
@XStreamAlias( "technologies" )
|
||||
@SuppressWarnings( "serial" )
|
||||
public static class Techs
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamImplicit( itemFieldName = "tech-line" )
|
||||
public List< TechLine > lines;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public static class TechLine
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String name;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public String description;
|
||||
|
||||
@XStreamImplicit( itemFieldName = "level" )
|
||||
public List< TechLevel > levels;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public static class TechLevel
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String name;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public String description;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public int points;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public int cost;
|
||||
}
|
||||
|
||||
private File file;
|
||||
private TransactionTemplate tTemplate;
|
||||
private StoredProc uocLine;
|
||||
private StoredProc uocLevel;
|
||||
|
||||
|
||||
private XStream initXStream( )
|
||||
{
|
||||
XStream xstream = new XStream( );
|
||||
xstream.processAnnotations( Techs.class );
|
||||
return xstream;
|
||||
}
|
||||
|
||||
|
||||
private Techs loadData( )
|
||||
{
|
||||
FileInputStream fis;
|
||||
try {
|
||||
fis = new FileInputStream( this.file );
|
||||
} catch ( FileNotFoundException e ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
XStream xstream = this.initXStream( );
|
||||
return (Techs) xstream.fromXML( fis );
|
||||
} catch ( Exception e ) {
|
||||
e.printStackTrace( );
|
||||
return null;
|
||||
} finally {
|
||||
try {
|
||||
fis.close( );
|
||||
} catch ( IOException e ) {
|
||||
// EMPTY
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private ClassPathXmlApplicationContext createContext( )
|
||||
{
|
||||
// Load data source and Hibernate properties
|
||||
String[] dataConfig = {
|
||||
this.getDataSource( )
|
||||
};
|
||||
FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext( dataConfig );
|
||||
ctx.refresh( );
|
||||
|
||||
// Load beans
|
||||
String[] cfg = {
|
||||
"configuration/transactions.xml"
|
||||
};
|
||||
return new ClassPathXmlApplicationContext( cfg , true , ctx );
|
||||
}
|
||||
|
||||
|
||||
private void getBeans( ApplicationContext ctx )
|
||||
{
|
||||
PlatformTransactionManager tManager = ctx.getBean( PlatformTransactionManager.class );
|
||||
this.tTemplate = new TransactionTemplate( tManager );
|
||||
|
||||
DataSource dataSource = ctx.getBean( DataSource.class );
|
||||
this.uocLine = new StoredProc( dataSource , "tech" , "uoc_line" );
|
||||
this.uocLine.addParameter( "tln" , Types.VARCHAR );
|
||||
this.uocLine.addParameter( "tld" , Types.VARCHAR );
|
||||
|
||||
this.uocLevel = new StoredProc( dataSource , "tech" , "uoc_level" );
|
||||
this.uocLevel.addParameter( "tech_line" , Types.VARCHAR );
|
||||
this.uocLevel.addParameter( "level" , Types.INTEGER );
|
||||
this.uocLevel.addParameter( "name" , Types.VARCHAR );
|
||||
this.uocLevel.addParameter( "desc" , Types.VARCHAR );
|
||||
this.uocLevel.addParameter( "points" , Types.INTEGER );
|
||||
this.uocLevel.addParameter( "cost" , Types.INTEGER );
|
||||
}
|
||||
|
||||
|
||||
private void importTechnologies( Techs data )
|
||||
{
|
||||
for ( TechLine line : data.lines ) {
|
||||
this.uocLine.execute( line.name , line.description );
|
||||
|
||||
int i = 1;
|
||||
for ( TechLevel level : line.levels ) {
|
||||
this.uocLevel.execute( line.name , i , level.name , level.description , level.points , level.cost );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run( )
|
||||
{
|
||||
final Techs data = this.loadData( );
|
||||
if ( data == null ) {
|
||||
System.err.println( "could not read data" );
|
||||
return;
|
||||
}
|
||||
|
||||
AbstractApplicationContext ctx = this.createContext( );
|
||||
this.getBeans( ctx );
|
||||
boolean rv = this.tTemplate.execute( new TransactionCallback< Boolean >( ) {
|
||||
|
||||
@Override
|
||||
public Boolean doInTransaction( TransactionStatus status )
|
||||
{
|
||||
boolean rv;
|
||||
try {
|
||||
importTechnologies( data );
|
||||
rv = true;
|
||||
} catch ( RuntimeException e ) {
|
||||
logger.error( e.getMessage( ) );
|
||||
rv = false;
|
||||
}
|
||||
if ( !rv ) {
|
||||
status.setRollbackOnly( );
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
if ( rv ) {
|
||||
this.logger.info( "Import successful" );
|
||||
}
|
||||
|
||||
this.tTemplate = null;
|
||||
ToolBase.destroyContext( ctx );
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean setOptions( String... options )
|
||||
{
|
||||
if ( options.length != 1 ) {
|
||||
return false;
|
||||
}
|
||||
this.file = new File( options[ 0 ] );
|
||||
if ( ! ( this.file.isFile( ) && this.file.canRead( ) ) ) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -39,8 +39,6 @@ from the root of the server's distribution:
|
|||
|
||||
java -jar legacyworlds-server-main-1.0.0-0.jar \
|
||||
--run-tool ImportText data/i18n-text.xml
|
||||
java -jar legacyworlds-server-main-1.0.0-0.jar \
|
||||
--run-tool ImportTechs data/techs.xml
|
||||
java -jar legacyworlds-server-main-1.0.0-0.jar \
|
||||
--run-tool ImportTechGraph data/tech-graph.xml
|
||||
java -jar legacyworlds-server-main-1.0.0-0.jar \
|
||||
|
|
Reference in a new issue