net.sf.colossus.server
Class VariantSupport

java.lang.Object
  extended by net.sf.colossus.server.VariantSupport

public final class VariantSupport
extends java.lang.Object

Class VariantSupport hold the members and functions required to support Variants in Colossus TODO this should probably move into the variant package sooner or later, possibly into the Variant class itself

Author:
Romain Dolbeau

Nested Class Summary
private static class VariantSupport.VariantLoadException
          A helper class to store the exception that happened during VariantLoading together with the task during which that happened.
 
Field Summary
private static IVariantHint aihl
           
private static Variant CURRENT_VARIANT
           
private static java.util.List<java.lang.String> dependUpon
           
private static java.lang.String hintName
           
private static java.util.List<java.lang.String> lCreaturesName
           
private static boolean loadedVariant
           
private static java.util.logging.Logger LOGGER
           
private static java.lang.String mapName
           
private static java.util.Properties markerNames
           
private static int maxPlayers
           
private static java.lang.String recruitsFileName
           
private static java.util.Map<java.lang.String,java.lang.String> rememberCustomDirs
           
private static java.lang.String varDirectory
           
private static java.lang.String varFilename
           
private static java.lang.String variantName
           
private static javax.swing.text.Document varREADME
           
 
Constructor Summary
VariantSupport()
           
 
Method Summary
static void freshenVariant(java.lang.String tempVarFilename, java.lang.String tempVarDirectory)
          Clean-up the ResourceLoader caches to make room for a variant.
static java.util.List<java.lang.String> getBattlelandsDirectoriesList()
           
static java.util.List<java.lang.String> getCreaturesNames()
           
static Variant getCurrentVariant()
          Retrieves the currently loaded variant.
static java.lang.String getFullPathFileForVariantName(java.lang.String varName)
           
static int getHintedRecruitmentValueOffset(CreatureType creature)
           
static int getHintedRecruitmentValueOffset(CreatureType creature, java.util.List<IVariantHint.AIStyle> aiStyles)
           
static java.util.List<java.lang.String> getImagesDirectoriesList()
           
static java.util.List<CreatureType> getInitialSplitHint(MasterHex hex)
           
static java.util.List<CreatureType> getInitialSplitHint(MasterHex hex, java.util.List<IVariantHint.AIStyle> aiStyles)
           
static java.lang.String getMapName()
           
static java.util.Properties getMarkerNamesProperties()
           
static int getMaxPlayers()
          get maximum number of players in that variant
private static javax.swing.text.Document getMissingReadmeNotification()
           
static CreatureType getRecruitHint(MasterBoardTerrain terrain, IOracleLegion legion, java.util.List<CreatureType> recruits, IHintOracle oracle)
           
static CreatureType getRecruitHint(MasterBoardTerrain terrain, IOracleLegion legion, java.util.List<CreatureType> recruits, IHintOracle oracle, java.util.List<IVariantHint.AIStyle> aiStyles)
           
static java.util.List<java.lang.String> getVarDirectoriesList()
           
static java.util.List<java.lang.String> getVarDirectoriesList(java.lang.String suffixPath)
           
static java.lang.String getVarDirectory()
           
static java.lang.String getVarFilename()
           
static java.lang.String getVariantName()
           
private static java.lang.String getVariantNameFromFilename(java.lang.String varFilename)
           
static AllCreatureType loadCreatures()
          Call immediately after loading variant, before using creatures.
private static void loadHints(Variant variant)
           
private static java.util.Properties loadMarkerNamesProperties()
           
static IVariantInitializer loadTerrainsAndRecruits(AllCreatureType creatureTypes)
           
static Variant loadVariant(java.lang.String tempVariantName, java.lang.String tempVarFilename, java.lang.String tempVarDirectory, boolean serverSide)
          Try to load a Colossus Variant from the specified filename in the specified path.
static Variant loadVariantByFile(java.io.File varFile, boolean serverSide)
          Load a Colossus Variant from the specified File
static Variant loadVariantByName(java.lang.String variantName, boolean serverSide)
          Load a Colossus Variant by name.
static void rememberFullPathFileForVariantName(java.lang.String varName, java.lang.String varFullPathFilename)
           
private static Variant tryLoadVariant(java.lang.String tempVariantName, java.lang.String tempVarFilename, java.lang.String tempVarDirectory, boolean serverSide)
          This does the actual work for loadVariant(String, String, String, boolean) This here is private and should be called only from the synchronized before-mentioned method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOGGER

private static final java.util.logging.Logger LOGGER

varDirectory

private static java.lang.String varDirectory

varFilename

private static java.lang.String varFilename

variantName

private static java.lang.String variantName

mapName

private static java.lang.String mapName

recruitsFileName

private static java.lang.String recruitsFileName

hintName

private static java.lang.String hintName

lCreaturesName

private static java.util.List<java.lang.String> lCreaturesName

varREADME

private static javax.swing.text.Document varREADME

dependUpon

private static java.util.List<java.lang.String> dependUpon

loadedVariant

private static boolean loadedVariant

maxPlayers

private static int maxPlayers

aihl

private static IVariantHint aihl

markerNames

private static java.util.Properties markerNames

CURRENT_VARIANT

private static Variant CURRENT_VARIANT

rememberCustomDirs

private static java.util.Map<java.lang.String,java.lang.String> rememberCustomDirs
Constructor Detail

VariantSupport

public VariantSupport()
Method Detail

freshenVariant

public static void freshenVariant(java.lang.String tempVarFilename,
                                  java.lang.String tempVarDirectory)
Clean-up the ResourceLoader caches to make room for a variant.

Parameters:
tempVarFilename - The name of the file holding the soon-to-be-loaded Variant definition.
tempVarDirectory - The path to the directory holding the soon-to-be-loaded Variant.

rememberFullPathFileForVariantName

public static void rememberFullPathFileForVariantName(java.lang.String varName,
                                                      java.lang.String varFullPathFilename)

getFullPathFileForVariantName

public static java.lang.String getFullPathFileForVariantName(java.lang.String varName)

loadVariantByName

public static Variant loadVariantByName(java.lang.String variantName,
                                        boolean serverSide)
Load a Colossus Variant by name.

Parameters:
variantName - The name of the variant.
serverSide - We're loading on a server.
Returns:
The loaded variant.

loadVariantByFile

public static Variant loadVariantByFile(java.io.File varFile,
                                        boolean serverSide)
Load a Colossus Variant from the specified File

Parameters:
varFile - The File to load as a Variant, probably selected by user in a FileSelectionDialog, with full absolute path.
serverSide - We're loading on a server.
Returns:
The loaded variant.

getVariantNameFromFilename

private static java.lang.String getVariantNameFromFilename(java.lang.String varFilename)
                                                    throws java.lang.Exception
Throws:
java.lang.Exception

loadVariant

public static Variant loadVariant(java.lang.String tempVariantName,
                                  java.lang.String tempVarFilename,
                                  java.lang.String tempVarDirectory,
                                  boolean serverSide)
Try to load a Colossus Variant from the specified filename in the specified path. If loading fails, inform user with a message dialog and try to load Default variant instead. If that fails as well, do a system.exit after another message dialog. Synchronized to avoid concurrent threads running into it at same time (probably not possible so far, but if one day Public Server game can run with one local human and several AIs (on user's computer) this would become an issue.

Parameters:
tempVarFilename - The name of the file holding the Variant definition.
tempVarDirectory - The path to the directory holding the Variant.
tempVariantName - The actual plain name of the variant
serverSide - We're loading on a server.
Returns:
A variant object, perhaps newly created, perhaps re-used if same variant was used before. TODO right now variant name might sometimes be null, then we try a hack to retrieve the variant name from the variant file name.

tryLoadVariant

private static Variant tryLoadVariant(java.lang.String tempVariantName,
                                      java.lang.String tempVarFilename,
                                      java.lang.String tempVarDirectory,
                                      boolean serverSide)
                               throws VariantSupport.VariantLoadException
This does the actual work for loadVariant(String, String, String, boolean) This here is private and should be called only from the synchronized before-mentioned method.

Parameters:
tempVariantName -
tempVarFilename -
tempVarDirectory -
serverSide -
Returns:
A variant object, perhaps newly created, perhaps re-used if same variant was used before.
Throws:
VariantSupport.VariantLoadException

loadCreatures

public static AllCreatureType loadCreatures()
Call immediately after loading variant, before using creatures.


getMissingReadmeNotification

private static javax.swing.text.Document getMissingReadmeNotification()

getVarDirectory

public static java.lang.String getVarDirectory()

getVarFilename

public static java.lang.String getVarFilename()

getVariantName

public static java.lang.String getVariantName()

getMapName

public static java.lang.String getMapName()

getCreaturesNames

public static java.util.List<java.lang.String> getCreaturesNames()

getVarDirectoriesList

public static java.util.List<java.lang.String> getVarDirectoriesList()

getVarDirectoriesList

public static java.util.List<java.lang.String> getVarDirectoriesList(java.lang.String suffixPath)

getImagesDirectoriesList

public static java.util.List<java.lang.String> getImagesDirectoriesList()

getBattlelandsDirectoriesList

public static java.util.List<java.lang.String> getBattlelandsDirectoriesList()

loadTerrainsAndRecruits

public static IVariantInitializer loadTerrainsAndRecruits(AllCreatureType creatureTypes)

loadMarkerNamesProperties

private static java.util.Properties loadMarkerNamesProperties()

getMarkerNamesProperties

public static java.util.Properties getMarkerNamesProperties()

loadHints

private static void loadHints(Variant variant)

getRecruitHint

public static CreatureType getRecruitHint(MasterBoardTerrain terrain,
                                          IOracleLegion legion,
                                          java.util.List<CreatureType> recruits,
                                          IHintOracle oracle)

getRecruitHint

public static CreatureType getRecruitHint(MasterBoardTerrain terrain,
                                          IOracleLegion legion,
                                          java.util.List<CreatureType> recruits,
                                          IHintOracle oracle,
                                          java.util.List<IVariantHint.AIStyle> aiStyles)

getInitialSplitHint

public static java.util.List<CreatureType> getInitialSplitHint(MasterHex hex)

getInitialSplitHint

public static java.util.List<CreatureType> getInitialSplitHint(MasterHex hex,
                                                               java.util.List<IVariantHint.AIStyle> aiStyles)

getHintedRecruitmentValueOffset

public static int getHintedRecruitmentValueOffset(CreatureType creature)

getHintedRecruitmentValueOffset

public static int getHintedRecruitmentValueOffset(CreatureType creature,
                                                  java.util.List<IVariantHint.AIStyle> aiStyles)

getMaxPlayers

public static int getMaxPlayers()
get maximum number of players in that variant


getCurrentVariant

public static Variant getCurrentVariant()
Retrieves the currently loaded variant. TODO this is a helper method to introduce the Variant objects into the code, in the long run they should be passed around instead of being in a static member here.