package org.oregami.data;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.persist.Transactional;
import org.apache.log4j.Logger;
import org.joda.time.LocalDate;
import org.oregami.entities.*;
import org.oregami.entities.datalist.*;
import org.oregami.entities.user.User;
import org.oregami.util.StartHelper;
import javax.persistence.EntityManager;
import java.util.Arrays;
import java.util.List;
/**
* Class to fill the database with some sample entities.
*
* @author twendelmuth
*
*/
public class DatabaseFiller {
Logger logger = Logger.getLogger(DatabaseFiller.class);
private static List<String> dataTables =
Arrays.asList( "Release", "ReleaseGroup", "GameTitle", "Game",
"GameTitle",
"PublicationIssue", "Publication", "PublicationFranchise",
"Language", "Region"
);
private static List<String> baseListDataTables =
Arrays.asList("Script", "BusinessModel", "CensorshipType", "DemoContentType", "GameEntryType", "ReleaseGroupReason", "ReleaseType", "RemakeEnhancementType", "TitleType", "UnreleaseState");
@Inject
private GameDao gameDao;
@Inject
private LanguageDao languageDao;
@Inject
private PublicationFranchiseDao publicationFranchiseDao;
BaseListFinder baseListFinder = StartHelper.getInstance(BaseListFinder.class);
BaseListFiller baseListFiller = StartHelper.getInstance(BaseListFiller.class);
public void addPublications() {
addPublicationPowerPlay();
addPublicationVideoGames();
}
private void addPublicationVideoGames() {
PublicationFranchise pf = new PublicationFranchise("Video Games");
Publication publicationVideoGames = new Publication("Video Games");
publicationVideoGames.setLanguage(languageDao.findByExactName(Language.GERMAN));
pf.getPublicationList().add(publicationVideoGames);
publicationVideoGames.getPublicationIssueList().add(new PublicationIssue(1991,1));
publicationVideoGames.getPublicationIssueList().add(new PublicationIssue(1991, 2));
publicationVideoGames.getPublicationIssueList().add(new PublicationIssue(1991,3));
publicationVideoGames.getPublicationIssueList().add(new PublicationIssue(1992,1));
publicationVideoGames.getPublicationIssueList().add(new PublicationIssue(1992,2));
publicationVideoGames.getPublicationIssueList().add(new PublicationIssue(1992, 3));
publicationFranchiseDao.save(pf);
}
private void addPublicationPowerPlay() {
PublicationFranchise pf = new PublicationFranchise("Power Play");
Publication publicationPowerPlay = new Publication("Power Play");
publicationPowerPlay.setLanguage(languageDao.findByExactName(Language.GERMAN));
pf.getPublicationList().add(publicationPowerPlay);
publicationPowerPlay.getPublicationIssueList().add(new PublicationIssue(1990,1));
publicationPowerPlay.getPublicationIssueList().add(new PublicationIssue(1990,2));
publicationPowerPlay.getPublicationIssueList().add(new PublicationIssue(1990,3));
PublicationIssue issue_1990_4 = new PublicationIssue(1990,4);
issue_1990_4.setReleaseDate(new LocalDate(1990,3,16));
publicationPowerPlay.getPublicationIssueList().add(issue_1990_4);
publicationPowerPlay.getPublicationIssueList().add(new PublicationIssue(1990, 5));
publicationPowerPlay.getPublicationIssueList().add(new PublicationIssue(1989,1));
Publication publicationChipPowerPlay = new Publication("CHIP Power Play");
pf.getPublicationList().add(publicationChipPowerPlay);
publicationChipPowerPlay.setLanguage(languageDao.findByExactName(Language.GERMAN));
publicationChipPowerPlay.getPublicationIssueList().add(new PublicationIssue(2013,1));
publicationChipPowerPlay.getPublicationIssueList().add(new PublicationIssue(2013,2));
publicationChipPowerPlay.getPublicationIssueList().add(new PublicationIssue(2013,3));
publicationChipPowerPlay.getPublicationIssueList().add(new PublicationIssue(2013,4));
publicationFranchiseDao.save(pf);
}
private void addMonkeyIsland() {
Game gameMonkeyIsland = new Game();
gameMonkeyIsland.setGameEntryType(baseListFinder.getGameEntryType(GameEntryType.GAME));
gameMonkeyIsland.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.ORIGINAL_TITLE),
baseListFinder.getScript(Script.LATIN),
languageDao.findByExactName(Language.ENGLISH),
"The Secret of Monkey Island"
)
);
gameMonkeyIsland.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.ABBREVIATION),
baseListFinder.getScript(Script.LATIN),
languageDao.findByExactName(Language.ENGLISH),
"Monkey Island 1"
)
);
gameMonkeyIsland.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.ORIGINAL_TITLE),
baseListFinder.getScript(Script.LATIN),
languageDao.findByExactName(Language.FRENCH),
"Le Secret de L'Ile aux Singes"
)
);
gameMonkeyIsland.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.ORIGINAL_TITLE),
baseListFinder.getScript(Script.CHINESE),
languageDao.findByExactName(Language.CHINESE),
"猴島小英雄"
)
);
/*
//#### Atari ST #######
ReleaseGroup rgAtari = new ReleaseGroup("Atari", SystemKey.AtariST, baseListFinder.getReleaseType(ReleaseType.PORT));
gameMonkeyIsland.addReleaseGroup(rgAtari);
//#### Amiga #######
ReleaseGroup rgAmiga = new ReleaseGroup("Amiga", SystemKey.Amiga, baseListFinder.getReleaseType(ReleaseType.PORT));
gameMonkeyIsland.addReleaseGroup(rgAmiga);
ReleaseGroup rgAmigaDemo = new ReleaseGroup("Amiga Demo", SystemKey.Amiga, baseListFinder.getReleaseType(ReleaseType.PORT));
gameMonkeyIsland.addReleaseGroup(rgAmigaDemo);
//#### MS-DOS ######
ReleaseGroup rgDos = new ReleaseGroup("DOS Initial Floppy", SystemKey.MSDOS, baseListFinder.getReleaseType(ReleaseType.NATIVE_DEVELOPMENT));
gameMonkeyIsland.addReleaseGroup(rgDos);
ReleaseGroup rgDosVga = new ReleaseGroup("DOS Floppy VGA", SystemKey.MSDOS, baseListFinder.getReleaseType(ReleaseType.NATIVE_DEVELOPMENT));
gameMonkeyIsland.addReleaseGroup(rgDosVga);
ReleaseGroup rgDosEnhancedCDRom = new ReleaseGroup("DOS Enhanced CDROM", SystemKey.MSDOS, baseListFinder.getReleaseType(ReleaseType.NATIVE_DEVELOPMENT));
gameMonkeyIsland.addReleaseGroup(rgDosEnhancedCDRom);
ReleaseGroup rgDosDemo = new ReleaseGroup("DOS Demo", SystemKey.MSDOS, baseListFinder.getReleaseType(ReleaseType.NATIVE_DEVELOPMENT));
gameMonkeyIsland.addReleaseGroup(rgDosDemo);
//#### FMTowns #######
ReleaseGroup rgFMTowns = new ReleaseGroup("FMTowns", SystemKey.FMTowns, baseListFinder.getReleaseType(ReleaseType.PORT));
gameMonkeyIsland.addReleaseGroup(rgFMTowns);
//#### Mac #######
ReleaseGroup rgMac = new ReleaseGroup("Mac", SystemKey.AppleMacintosh, baseListFinder.getReleaseType(ReleaseType.PORT));
gameMonkeyIsland.addReleaseGroup(rgMac);
ReleaseGroup rgMacSE = new ReleaseGroup("Mac SE", SystemKey.AppleMacintosh, baseListFinder.getReleaseType(ReleaseType.PORT));
gameMonkeyIsland.addReleaseGroup(rgMacSE);
*/
gameDao.save(gameMonkeyIsland);
}
private void addResidentEvilGame() {
Game gameResidentEvil = new Game();
gameResidentEvil.setGameEntryType(baseListFinder.getGameEntryType(GameEntryType.GAME));
gameResidentEvil.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.ORIGINAL_TITLE),
baseListFinder.getScript(Script.LATIN),
languageDao.findByExactName(Language.ENGLISH),
"Resident Evil"
)
);
gameResidentEvil.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.RE_RELEASE_TITLE),
baseListFinder.getScript(Script.LATIN),
languageDao.findByExactName(Language.ENGLISH),
"Resident Evil: Director's Cut"
)
);
ReleaseGroup rgPsOne = new ReleaseGroup("PS 1 Release", getGamingEnvironmentPlaystation1(), baseListFinder.getReleaseType(ReleaseType.NATIVE_DEVELOPMENT));
gameResidentEvil.addReleaseGroup(rgPsOne);
gameDao.save(gameResidentEvil);
}
private void addXWingGame() {
Game gameXWing = new Game();
gameXWing.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.ABBREVIATION),
baseListFinder.getScript(Script.LATIN),
languageDao.findByExactName(Language.ENGLISH),
"Star Wars - X-Wing"
)
);
gameXWing.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.ABBREVIATION),
baseListFinder.getScript(Script.LATIN),
languageDao.findByExactName(Language.ENGLISH),
"X-Wing"
)
);
gameXWing.addGameTitle(
TitleFactory.createGameTitle(
null, //Region
baseListFinder.getTitleType(TitleType.ORIGINAL_TITLE),
baseListFinder.getScript(Script.LATIN),
languageDao.findByExactName(Language.ENGLISH),
"Star Wars - X-Wing: Space Combat Simulator"
)
);
gameDao.save(gameXWing);
}
private void addGames() {
if (gameDao.findAll().size()>0) return;
addMonkeyIsland();
addResidentEvilGame();
addXWingGame();
}
public void initBaseLists() {
baseListFiller.initBaseLists();
}
public void initGameData() {
if (StartHelper.getInstance(LanguageDao.class).findAll().size()==0) {
addLanguages();
addRegions();
addGamingEnvironments();
//addPlatforms();
addGames();
addPublications();
}
}
private void addGamingEnvironments() {
GamingEnvironmentDao dao = getInjector().getInstance(GamingEnvironmentDao.class);
//====== SONY PLAYSTATION =================
GamingEnvironment gamingEnvironmentPlaystation = new GamingEnvironment();
PlatformTitle pt1 = TitleFactory.createPlatformTitle(
StartHelper.getInstance(RegionDao.class).findByExactName(Region.UNITED_STATES),
StartHelper.getInstance(BaseListFinder.class).getTitleType(TitleType.ORIGINAL_TITLE),
StartHelper.getInstance(BaseListFinder.class).getScript(Script.LATIN),
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.ENGLISH),
"Sony Playstation"
);
gamingEnvironmentPlaystation.addTitle(pt1);
PlatformTitle pt2 = TitleFactory.createPlatformTitle(
StartHelper.getInstance(RegionDao.class).findByExactName(Region.JAPAN),
StartHelper.getInstance(BaseListFinder.class).getTitleType(TitleType.ORIGINAL_TITLE),
StartHelper.getInstance(BaseListFinder.class).getScript(Script.JAPANESE),
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.JAPANESE),
"プレイステーション"
);
gamingEnvironmentPlaystation.addTitle(pt2);
dao.save(gamingEnvironmentPlaystation);
//====== NES =================
GamingEnvironment nes = new GamingEnvironment();
nes.addTitle(TitleFactory.createPlatformTitle(
StartHelper.getInstance(RegionDao.class).findByExactName(Region.UNITED_STATES),
StartHelper.getInstance(BaseListFinder.class).getTitleType(TitleType.ORIGINAL_TITLE),
StartHelper.getInstance(BaseListFinder.class).getScript(Script.LATIN),
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.ENGLISH),
"Famicom"
));
nes.addTitle(TitleFactory.createPlatformTitle(
StartHelper.getInstance(RegionDao.class).findByExactName(Region.EUROPE),
StartHelper.getInstance(BaseListFinder.class).getTitleType(TitleType.ORIGINAL_TITLE),
StartHelper.getInstance(BaseListFinder.class).getScript(Script.LATIN),
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.ENGLISH),
"Nintendo Entertainment System"
));
nes.addTitle(TitleFactory.createPlatformTitle(
StartHelper.getInstance(RegionDao.class).findByExactName(Region.JAPAN),
StartHelper.getInstance(BaseListFinder.class).getTitleType(TitleType.ORIGINAL_TITLE),
StartHelper.getInstance(BaseListFinder.class).getScript(Script.JAPANESE),
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.JAPANESE),
"ファミリーコンピュータ"
));
dao.save(nes);
//====== Amiga =================
GamingEnvironment amiga = new GamingEnvironment();
amiga.addTitle(TitleFactory.createPlatformTitle(
StartHelper.getInstance(RegionDao.class).findByExactName(Region.EUROPE),
StartHelper.getInstance(BaseListFinder.class).getTitleType(TitleType.ORIGINAL_TITLE),
StartHelper.getInstance(BaseListFinder.class).getScript(Script.LATIN),
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.ENGLISH),
"Commodore Amiga"
));
HardwarePlatform hpAmiga = new HardwarePlatform();
hpAmiga.addTitle(TitleFactory.createLatinPlatformTitle(
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.ENGLISH),
"Amiga M68K Machine & Compatibles"
));
hpAmiga.addTitle(TitleFactory.createLatinPlatformTitle(
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.GERMAN),
"Amiga M68K und Kompatible"
));
amiga.setHardwarePlatform(hpAmiga);
dao.save(amiga);
//====== C64 =================
GamingEnvironment c64 = new GamingEnvironment();
c64.addTitle(TitleFactory.createPlatformTitle(
StartHelper.getInstance(RegionDao.class).findByExactName(Region.EUROPE),
StartHelper.getInstance(BaseListFinder.class).getTitleType(TitleType.ORIGINAL_TITLE),
StartHelper.getInstance(BaseListFinder.class).getScript(Script.LATIN),
StartHelper.getInstance(LanguageDao.class).findByExactName(Language.ENGLISH),
"Commodore 64"
));
dao.save(c64);
//====== MS-DOS =================
GamingEnvironment msdos = new GamingEnvironment();
msdos.addTitle(TitleFactory.createPlatformTitle(
StartHelper.getInstance(RegionDao.class).findByExactName(Region.EUROPE),
StartHelper.getInstance(BaseListFinder.class).getTitleType(TitleType.ORIGINAL_TITLE),
StartHelper.getInstance(BaseListFinder.class).getScript(Script.LATIN),
null,
"MS-DOS"
));
dao.save(msdos);
}
// @Transactional
public void initData() {
initBaseLists();
initGameData();
}
public void addRegions() {
//countries:
RegionDao regionDao = getInjector().getInstance(RegionDao.class);
regionDao.save(new Region(Region.GERMANY, true, false, null));
regionDao.save(new Region(Region.UNITED_STATES, true, false, null));
regionDao.save(new Region(Region.UNITED_KINGDOM, true, false, null));
regionDao.save(new Region(Region.FRANCE, true, false, null));
regionDao.save(new Region(Region.JAPAN, true, false, null));
regionDao.save(new Region(Region.CHINA, true, false, null));
//regions:
regionDao.save(new Region(Region.EUROPE, false, false, null));
regionDao.save(new Region(Region.NORTH_AMERICA, false, false, null));
}
public void addLanguages() {
LanguageDao languageDao = getInjector().getInstance(LanguageDao.class);
languageDao.save(new Language(Language.ARABIC));
languageDao.save(new Language(Language.BENGALI));
languageDao.save(new Language(Language.CANTONESE));
languageDao.save(new Language(Language.CHINESE));
languageDao.save(new Language(Language.DUTCH));
languageDao.save(new Language(Language.ENGLISH));
languageDao.save(new Language(Language.FRENCH));
languageDao.save(new Language(Language.GERMAN));
languageDao.save(new Language(Language.GREEK));
languageDao.save(new Language(Language.HINDI));
languageDao.save(new Language(Language.ITALIAN));
languageDao.save(new Language(Language.JAPANESE));
languageDao.save(new Language(Language.KOREAN));
languageDao.save(new Language(Language.MANDARIN));
languageDao.save(new Language(Language.PERSIAN));
languageDao.save(new Language(Language.POLISH));
languageDao.save(new Language(Language.PORTUGUESE));
languageDao.save(new Language(Language.PUNJABI));
languageDao.save(new Language(Language.RUSSIAN));
languageDao.save(new Language(Language.SPANISH));
languageDao.save(new Language(Language.TURKISH));
}
@Transactional
public void deleteGameData() {
EntityManager em = getInjector().getInstance(EntityManager.class);
for (String tableName : dataTables) {
System.out.println("deleting all rows from " + tableName);
int update = em.createQuery("DELETE FROM " + tableName).executeUpdate();
if (logger.isDebugEnabled()) {
logger.debug("deleted all " + update + " rows from " + tableName);
}
}
}
@Transactional
public void deleteBaseListData() {
EntityManager em = getInjector().getInstance(EntityManager.class);
for (String tableName : baseListDataTables) {
int update = em.createQuery("DELETE FROM " + tableName).executeUpdate();
System.out.println("deleting all rows from " + tableName);
if (logger.isDebugEnabled()) {
logger.debug("deleted all " + update + " rows from " + tableName);
}
}
}
@Transactional
public void initDemoUser() {
UserDao userDao = getInjector().getInstance(UserDao.class);
if (userDao.findAll().size()==0) {
User user = new User();
user.setEmail("user1@oregami.org");
user.setUsername("user1");
user.setPasswordAndEncryptIt("password1");
userDao.save(user);
User user2 = new User();
user2.setEmail("user2@oregami.org");
user2.setUsername("user2");
user2.setPasswordAndEncryptIt("password2");
userDao.save(user2);
User user3 = new User();
user3.setEmail("gene1@oregami.org");
user3.setUsername("gene");
user3.setPasswordAndEncryptIt("gene");
userDao.save(user3);
}
}
@Transactional
public void dropAllData() {
EntityManager em = getInjector().getInstance(EntityManager.class);
em.createNativeQuery("TRUNCATE SCHEMA public AND COMMIT NO CHECK").executeUpdate();
StartHelper.getInstance(BaseListFiller.class).reset();
}
public Injector getInjector() {
return StartHelper.getInjector();
}
private GamingEnvironment getGamingEnvironmentPlaystation1() {
return getInjector().getInstance(GamingEnvironmentDao.class).findOneByExactTitle("Sony Playstation");
}
private GamingEnvironment getGamingEnvironmentPlaystation2() {
return getInjector().getInstance(GamingEnvironmentDao.class).findOneByExactTitle("Playstation 2");
}
}