/*******************************************************************************
* Copyright (c) 2001-2011 Mad Cow Entertainment and Corporation
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* �bel Heged�s - initial API and implementation
*******************************************************************************/
package madcow.magic.model.support;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import madcow.magic.database.card.Card;
import madcow.magic.database.card.Creature;
import madcow.magic.database.card.ManaType;
import madcow.magic.database.card.RarityType;
import madcow.magic.database.core.CardCSVFields;
import madcow.magic.database.core.Database;
import madcow.magic.database.core.MagicDBElement;
import madcow.magic.database.set.Block;
import madcow.magic.database.set.BlockType;
import madcow.magic.database.set.Set;
import madcow.magic.database.set.SetFactory;
import org.eclipse.emf.common.util.EList;
/**
*
* @author �bel Heged�s
*
*/
public final class MagicDatabaseHelper {
public static int initializeMagicElementFromCSV(MagicDBElement mdbelement, EList<EList<String>> values, int index) {
EList<String> line = values.get(index);
//setId(line.get(1).trim());
if(2 < line.size()){
mdbelement.setName(line.get(2).trim());
}
if(3 < line.size()){
mdbelement.setDescription(line.get(3).trim());
}
return index;
}
public static int initializeBlockFromCSV(Block block, EList<EList<String>> values, int index) {
index = initializeMagicElementFromCSV(block, values, index);
EList<String> line = values.get(index);
block.setId(line.get(1).trim());
if(4 < line.size()){
block.setType(BlockType.get(line.get(4).trim()));
}
index++;
while(index < values.size() && 0 < values.get(index).size()){
EList<String> setline = values.get(index);
if(setline.get(0).equals("SET")){
Set set = SetFactory.eINSTANCE.createSet();
block.getSets().add(set);
index = MagicDatabaseHelper.initializeSetFromCSV(set, values, index);
} else break;
}
return index;
}
public static int initializeSetFromCSV(Set set, EList<EList<String>> values, int index) {
index = initializeMagicElementFromCSV(set, values, index);
EList<String> line = values.get(index);
set.setId(line.get(1).trim());
try {
if(4 < line.size()){
DateFormat df = new SimpleDateFormat("mm/yyyy");
set.setDate(df.parse(line.get(4).trim()));
}
} catch (ParseException e) {
// TODO alter logging to internal logger
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).warning("Date not formatted correctly");
}
try {
if(5 < line.size()){
set.setCardTotal(Integer.parseInt(line.get(5).trim()));
}
} catch (NumberFormatException e) {
// TODO alter logging to internal logger
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).warning("Number not formatted correctly");
}
return index+1;
}
public static int initializeDBFromCSV(Database db, EList<EList<String>> values, int index) {
index = initializeMagicElementFromCSV(db, values, index)+1;
while(index < values.size() && 0 < values.get(index).size()){
EList<String> line = values.get(index);
if(line.get(0).equals("BLOCK")){
Block block = SetFactory.eINSTANCE.createBlock();
db.getBlocks().add(block);
index = MagicDatabaseHelper.initializeBlockFromCSV(block, values, index);
}
}
return index;
}
public static Card findCardByName(Database db, String cardName) {
Card result = null;
for (Block block : db.getBlocks()) {
for (Set set : block.getSets()) {
for (Card card : set.getCards()) {
if (card.getName().equals(cardName)) {
if(null == card.getOriginalCard()){
result = card;
} else {
result = card.getOriginalCard();
}
return result;
}
}
}
}
return result;
}
public static Card findCardByNumberAndSetId(Database db, int cardNumber, String setId) {
Card result = null;
Set set = findSetById(db, setId);
if(null != set){
for (Card card : set.getCards()) {
if (cardNumber == card.getNumber()) {
result = card;
return result;
}
}
}
return result;
}
public static Card findCardByNameAndSetId(Database db, String cardName, String setId) {
Card result = null;
Set set = findSetById(db, setId);
if(null != set){
for (Card card : set.getCards()) {
if (cardName.equals(card.getName())) {
result = card;
return result;
}
}
}
return result;
}
public static Set findSetByName(Database db, String setName) {
Set result = null;
for (Block block : db.getBlocks()) {
for (Set set : block.getSets()) {
if(set.getName().equals(setName)){
result = set;
break;
}
}
}
return result;
}
public static Set findSetById(Database db, String setId) {
Set result = null;
for (Block block : db.getBlocks()) {
for (Set set : block.getSets()) {
if(setId.equals(set.getId())){
result = set;
break;
}
}
}
return result;
}
}