/*
* DONE! SAVE CHARACTER TO XML
*/
/*
* TODO:
*
* display character information
*
* add:
* cleric domain
* druid animal companion
* ranger favored enemy
* sorcerer familiar
* wizard familiar, specialty school/prohibited school
*
*/
package guis;
//import java.io.File;
import java.util.ArrayList;
//
//import javax.xml.parsers.DocumentBuilder;
//import javax.xml.parsers.DocumentBuilderFactory;
//import javax.xml.parsers.ParserConfigurationException;
//import javax.xml.transform.Transformer;
//import javax.xml.transform.TransformerException;
//import javax.xml.transform.TransformerFactory;
//import javax.xml.transform.dom.DOMSource;
//import javax.xml.transform.stream.StreamResult;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
//import org.w3c.dom.Document;
//import org.w3c.dom.Element;
import core.Main;
import core.SaveCharacter;
import core.character;
public class Wiz8 {
private CharacterWizard cw;
private Composite wiz8;
private character character;
public Wiz8(CharacterWizard cw, Device dev, int WIDTH, int HEIGHT,
final Composite panel, final StackLayout layout,
final ArrayList<Composite> wizPages) {
wiz8 = wizPages.get(7);
this.cw = cw;
this.character = cw.getCharacter();
createPageContent();
}
private void createPageContent() {
GridLayout layout = new GridLayout(2, true);
wiz8.setLayout(layout);
GridData gd;
Label wiz9Label = new Label(wiz8, SWT.NONE);
wiz9Label.setText("Done!");
gd = new GridData(SWT.CENTER, SWT.CENTER, true, false);
gd.horizontalSpan = 2;
wiz9Label.setLayoutData(gd);
wiz9Label.pack();
Text charText = new Text(wiz8, SWT.BORDER | SWT.READ_ONLY | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
//charText.setBounds(10, 20, WIDTH - 40, HEIGHT - 110);
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
gd.horizontalSpan = 2;
charText.setLayoutData(gd);
charText.setText(character.toString());
//charText.pack();
Button wiz9CancelButton = cw.createCancelButton(wiz8);
gd = new GridData(SWT.LEFT, SWT.CENTER, true, false);
wiz9CancelButton.setLayoutData(gd);
wiz9CancelButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if (cw.cancel)
cw.reset();
}
});
Button wiz9SaveButton = new Button(wiz8, SWT.PUSH);
wiz9SaveButton.setText("Save");
gd = new GridData(SWT.RIGHT, SWT.CENTER, true, false);
wiz9SaveButton.setLayoutData(gd);
//wiz9SaveButton.setBounds(WIDTH-117,HEIGHT-90, 100, 50);
wiz9SaveButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
// save
saveCharacter(character);
cw.disposeShell();
return;
}
});
//Button wiz9BackButton = cw.createBackButton(wiz9, panel, layout);
wiz8.layout();
}
public static void saveCharacter(character character) {
try {
Main.gameState.currentlyLoadedCharacter = character;
new SaveCharacter(true);
/*DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// root elements
Document doc = docBuilder.newDocument();
Element Character = doc.createElement("Character");
doc.appendChild(Character);
// Character name
Element Name = doc.createElement("Name");
Name.appendChild(doc.createTextNode(character.getName()));
Character.appendChild(Name);
// Level
Element Level = doc.createElement("Level");
Level.appendChild(doc.createTextNode(
Integer.toString(character.getLevel())));
Character.appendChild(Level);
// Exp
Element Exp = doc.createElement("Exp");
Exp.appendChild(doc.createTextNode(
Integer.toString(character.getExp())));
Character.appendChild(Exp);
// Class
Element Class = doc.createElement("Class");
Class.appendChild(doc.createTextNode(character.getCharClass().getName()));
Character.appendChild(Class);
if(character.getCharSecClass() != null){
// Second Class
Element SecClass = doc.createElement("SecClass");
SecClass.appendChild(doc.createTextNode(character.getCharSecClass().getName()));
Character.appendChild(SecClass);
}
// Race
Element Race = doc.createElement("Race");
Race.appendChild(doc.createTextNode(character.getCharRace().getName()));
Character.appendChild(Race);
// Alignment
Element Alignment = doc.createElement("Alignment");
Alignment.appendChild(doc.createTextNode(character.getAlignment()));
Character.appendChild(Alignment);
// Size
Element Size = doc.createElement("Size");
Size.appendChild(doc.createTextNode(
Integer.toString(character.getSize())));
Character.appendChild(Size);
// Age
Element Age = doc.createElement("Age");
Age.appendChild(doc.createTextNode(character.getAge()));
Character.appendChild(Age);
// Gender
Element Gender = doc.createElement("Gender");
Gender.appendChild(doc.createTextNode(character.getGender()));
Character.appendChild(Gender);
// Height
Element Height = doc.createElement("Height");
Height.appendChild(doc.createTextNode(character.getHeight()));
Character.appendChild(Height);
// Weight
Element Weight = doc.createElement("Weight");
Weight.appendChild(doc.createTextNode(character.getWeight()));
Character.appendChild(Weight);
// Eyes
Element Eyes = doc.createElement("Eyes");
Eyes.appendChild(doc.createTextNode(character.getEyes()));
Character.appendChild(Eyes);
// Hair
Element Hair = doc.createElement("Hair");
Hair.appendChild(doc.createTextNode(character.getHair()));
Character.appendChild(Hair);
// Skin
Element Skin = doc.createElement("Skin");
Skin.appendChild(doc.createTextNode(character.getSkin()));
Character.appendChild(Skin);
// Strength
Element Strength = doc.createElement("STR");
Strength.appendChild(doc.createTextNode(
Integer.toString(character.getAbilityScores()[0])));
Character.appendChild(Strength);
// Dexterity
Element Dexterity = doc.createElement("DEX");
Dexterity.appendChild(doc.createTextNode(
Integer.toString(character.getAbilityScores()[1])));
Character.appendChild(Dexterity);
// Constitution
Element Constitution = doc.createElement("CON");
Constitution.appendChild(doc.createTextNode(
Integer.toString(character.getAbilityScores()[2])));
Character.appendChild(Constitution);
// Intelligence
Element Intelligence = doc.createElement("INT");
Intelligence.appendChild(doc.createTextNode(
Integer.toString(character.getAbilityScores()[3])));
Character.appendChild(Intelligence);
// Wisdom
Element Wisdom = doc.createElement("WIS");
Wisdom.appendChild(doc.createTextNode(
Integer.toString(character.getAbilityScores()[4])));
Character.appendChild(Wisdom);
// Charisma
Element Charisma = doc.createElement("CHA");
Charisma.appendChild(doc.createTextNode(
Integer.toString(character.getAbilityScores()[5])));
Character.appendChild(Charisma);
// Hitpoints
Element Hitpoints = doc.createElement("HP");
Hitpoints.appendChild(doc.createTextNode(
Integer.toString(character.getHitPoints())));
Character.appendChild(Hitpoints);
// Remaining Hitpoints
Element RemainingHP = doc.createElement("DMG");
RemainingHP.appendChild(doc.createTextNode(
Integer.toString(character.getDamageTaken())));
Character.appendChild(RemainingHP);
//Go through the Skill list
String skillList = "";
for(int i = 0; i < character.getSkills().size(); i++){
// Skill Name
skillList += character.getSkills().get(i).getSkill().getName()
+ " " + character.getSkills().get(i).getRank();
if( i != character.getSkills().size() - 1) {
skillList += "/";
}
}
Element Skills = doc.createElement("Skills");
Skills.appendChild(doc.createTextNode(skillList));
Character.appendChild(Skills);
// Launguages
Element Languages = doc.createElement("Languages");
// Launguages.appendChild(doc.createTextNode(character.getLanguages())); TODO
Character.appendChild(Languages);
// Gold
Element Gold = doc.createElement("GP");
Gold.appendChild(doc.createTextNode(
Integer.toString(character.getGP())));
Character.appendChild(Gold);
//Go through the Feat list
String featsList = "";
// featName:special;count
for(int i = 0; i < character.getFeats().size(); i++){
featsList += character.getFeats().get(i).getFeat().getName();
featsList += ":";
if (character.getFeats().get(i).getSpecial() != null)
featsList += character.getFeats().get(i).getSpecial();
featsList += ";" + character.getFeats().get(i).getCount() + "/";
}
Element Feats = doc.createElement("Feats");
Feats.appendChild(doc.createTextNode(featsList));
Character.appendChild(Feats);
//Go through the Abilities list
String abilityList = "";
for(int i = 0; i < character.getSpecialAbilities().size(); i++){
// Ability
abilityList += character.getSpecialAbilities().get(i).getName() + "/";
}
Element Ability = doc.createElement("Abilities");
Ability.appendChild(doc.createTextNode(abilityList));
Character.appendChild(Ability);
//Go through the Spell list TODO
String spellList = " ";
for(int i = 0; i < character.getSpells().size(); i++){
// Spell Name
spellList += character.getSpells().get(i).getName() + "/";
}
Element Spell = doc.createElement("Spells");
Spell.appendChild(doc.createTextNode(spellList));
Character.appendChild(Spell);
//Go through the Prep Spell list TODO
String prepSpells = " ";
for(int i = 0; i < character.getPrepSpells().size(); i++){
// Prep Spell Name
prepSpells += character.getPrepSpells().get(i).getName() + "/";
}
Element PrepSpell = doc.createElement("PreparedSpells");
PrepSpell.appendChild(doc.createTextNode(prepSpells));
Character.appendChild(PrepSpell);
//Go through the Items list
String itemList = "";
for(int i = 0; i < character.getItems().size(); i++){
// Item Name
itemList += character.getItems().get(i).getName() + "/";
}
Element Item = doc.createElement("Items");
Item.appendChild(doc.createTextNode(itemList));
Character.appendChild(Item);
//Go through the Weapons list TODO
String weaponsList = " ";
for(int i = 0; i < character.getWeapons().size(); i++){
// Weapons Name
weaponsList += character.getWeapons().get(i).getName();
}
Element Weapon = doc.createElement("Weapons");
Weapon.appendChild(doc.createTextNode(weaponsList));
Character.appendChild(Weapon);
//Go through the Armor list TODO
Element Armors = doc.createElement("Armors");
String armorList = " ";
for(int i = 0; i < character.getArmor().size(); i++){
armorList += character.getArmor().get(i).getName();
if( i != character.getArmor().size() - 1) {
armorList += "/";
}
}
Armors.appendChild(doc.createTextNode(armorList));
Character.appendChild(Armors);
//Go through the Shield list
Element shields = doc.createElement("Shields");
String shieldList = " ";
//for(int i = 0; i < character.getArmor().size(); i++){
// shieldList += character.getArmor().get(i).getName();
// if( i != character.getArmor().size() - 1) {
// shieldList += "/";
// }
//}
shields.appendChild(doc.createTextNode(shieldList));
Character.appendChild(shields);
// AC
Element AC = doc.createElement("AC");
String ac = Integer.toString(character.getAC()[0]);
for (int i = 0; i < character.getAC().length; i++)
ac += " + " + character.getAC()[i];
AC.appendChild(doc.createTextNode(ac));
Character.appendChild(AC);
// TouchAC
Element TouchAC = doc.createElement("TouchAC");
TouchAC.appendChild(doc.createTextNode(Integer.toString(
character.getTouchAC())));
Character.appendChild(TouchAC);
// flatFootedAC
Element FlatAC = doc.createElement("FlatAC");
FlatAC.appendChild(doc.createTextNode(Integer.toString(
character.getFlatFootedAC())));
Character.appendChild(FlatAC);
// initMod
Element initMod = doc.createElement("InitMod");
String init = Integer.toString(character.getInitMod()[0]);
for (int i = 0; i < character.getInitMod().length; i++)
init += " + " + character.getInitMod()[i];
initMod.appendChild(doc.createTextNode(init));
Character.appendChild(initMod);
// Fortitude Saving throw
Element fortSave = doc.createElement("FortSave");
String fort = Integer.toString(character.getFortSave()[0]);
for (int i = 0; i < character.getFortSave().length; i++)
fort += " + " + character.getFortSave()[i];
fortSave.appendChild(doc.createTextNode(fort));
Character.appendChild(fortSave);
// Reflex Saving throw
Element reflexSave = doc.createElement("ReflexSave");
String reflex = Integer.toString(character.getReflexSave()[0]);
for (int i = 0; i < character.getReflexSave().length; i++)
reflex += " + " + character.getReflexSave()[i];
reflexSave.appendChild(doc.createTextNode(reflex));
Character.appendChild(reflexSave);
// Will Saving throw
Element willSave = doc.createElement("WillSave");
String will = Integer.toString(character.getWillSave()[0]);
for (int i = 0; i < character.getWillSave().length; i++)
will += " + " + character.getWillSave()[i];
willSave.appendChild(doc.createTextNode(will));
Character.appendChild(willSave);
// baseAttackBonus
Element baseAttackBonus = doc.createElement("BaseAttackBonus");
baseAttackBonus.appendChild(doc.createTextNode(Integer.toString(
character.getBaseAttackBonus())));
Character.appendChild(baseAttackBonus);
// spellResistance
Element spellResistance = doc.createElement("SpellResistance");
spellResistance.appendChild(doc.createTextNode(Integer.toString(
character.getSpellResistance())));
Character.appendChild(spellResistance);
// grappleMod
Element grappleMod = doc.createElement("GrappleMod");
String grapple = Integer.toString(character.getGrappleMod()[0]);
for (int i = 0; i < character.getGrappleMod().length; i++)
grapple += " + " + character.getGrappleMod()[i];
grappleMod.appendChild(doc.createTextNode(grapple));
Character.appendChild(grappleMod);
// Speed
Element Speed = doc.createElement("Speed");
Speed.appendChild(doc.createTextNode(Integer.toString(
character.getSpeed())));
Character.appendChild(Speed);
// damageReduction
Element damageReduction = doc.createElement("DamageReduction");
damageReduction.appendChild(doc.createTextNode(Integer.toString(
character.getDamageReduction())));
Character.appendChild(damageReduction);
// TODO
Element shield = doc.createElement("Shield");
shield.appendChild(doc.createTextNode(" "));
Character.appendChild(shield);
// TODO
Element pp = doc.createElement("PP");
pp.appendChild(doc.createTextNode(" "));
Character.appendChild(pp);
// TODO
Element armor = doc.createElement("Armor");
armor.appendChild(doc.createTextNode(" "));
Character.appendChild(armor);
// TODO
Element sp = doc.createElement("SP");
sp.appendChild(doc.createTextNode(" "));
Character.appendChild(sp);
// TODO
Element cp = doc.createElement("CP");
cp.appendChild(doc.createTextNode(" "));
Character.appendChild(cp);
// TODO
Element secClass = doc.createElement("SecClass");
secClass.appendChild(doc.createTextNode(" "));
Character.appendChild(secClass);
// TODO
Element secLevel = doc.createElement("SecLevel");
secLevel.appendChild(doc.createTextNode("0"));
Character.appendChild(secLevel);
// TODO
Element priWeapon = doc.createElement("PrimaryWeapon");
priWeapon.appendChild(doc.createTextNode(" "));
Character.appendChild(priWeapon);
// TODO
Element secWeapon = doc.createElement("SecondaryWeapon");
secWeapon.appendChild(doc.createTextNode(" "));
Character.appendChild(secWeapon);
// TODO
Element dmgTaken = doc.createElement("DamageTaken");
dmgTaken.appendChild(doc.createTextNode(" "));
Character.appendChild(dmgTaken);
// TODO
Element imagePath = doc.createElement("Image");
imagePath.appendChild(doc.createTextNode(" "));
Character.appendChild(imagePath);
//Go through the ClericDomains list
String clericDomainList = "";
if(character.getClericDomains() != null){
for(int i = 0; i < character.getClericDomains().length; i++){
// Item Name
clericDomainList += character.getClericDomains()[i] + "/";
}
}
Element clericDomains = doc.createElement("ClericDomains");
clericDomains.appendChild(doc.createTextNode(clericDomainList));
Character.appendChild(clericDomains);
// druidAnimalCompanion
String animalCompanion = "";
if (character.getDruidAnimalCompanion() != null)
animalCompanion = character.getDruidAnimalCompanion();
Element druidAnimalCompanion = doc.createElement("DruidAnimalCompanion");
druidAnimalCompanion.appendChild(doc.createTextNode(animalCompanion));
Character.appendChild(druidAnimalCompanion);
// rangerFavoredEnemy
String favoriteEnemy = "";
if (character.getRangerFavoredEnemy() != null)
favoriteEnemy = character.getRangerFavoredEnemy();
Element rangerFavoredEnemy = doc.createElement("RangerFavoredEnemy");
rangerFavoredEnemy.appendChild(doc.createTextNode(
favoriteEnemy));
Character.appendChild(rangerFavoredEnemy);
// familiar
String familiarName = "";
if (character.getFamiliar() != null)
familiarName = character.getFamiliar();
Element familiar = doc.createElement("Familiar");
familiar.appendChild(doc.createTextNode(
familiarName));
Character.appendChild(familiar);
// wizardSpecialtySchool
String specialtySchool = "";
if (character.getWizardSpecialtySchool() != null)
specialtySchool = character.getWizardSpecialtySchool();
Element wizardSpecialtySchool = doc.createElement("WizardSpecialtySchool");
wizardSpecialtySchool.appendChild(doc.createTextNode(
specialtySchool));
Character.appendChild(wizardSpecialtySchool);
//Go through the wizardProhibitedSchools list
String wizardProhibitedSchoolsList = "";
if(character.getWizardProhibitedSchools() != null){
for(int i = 0; i < character.getWizardProhibitedSchools().length; i++){
// Item Name
wizardProhibitedSchoolsList += character.getWizardProhibitedSchools()[i] + "/";
}
}
Element wizardProhibitedSchools = doc.createElement("WizardProhibitedSchools");
wizardProhibitedSchools.appendChild(doc.createTextNode(wizardProhibitedSchoolsList));
Character.appendChild(wizardProhibitedSchools);
// Notes
Element Notes = doc.createElement("Notes");
Notes.appendChild(doc.createTextNode(character.getNotes()));
Character.appendChild(Notes);
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
//change back to character.getName() is not working correctly
String charName = character.getName().replaceAll("[^A-Za-z0-9]", "");
try{
File CHARACTER = new File(System.getProperty("user.dir") + "//" + "User Data" + "//" + "Character");
CHARACTER.mkdir();
File CHARDIR = new File(System.getProperty("user.dir") + "//" + "User Data" + "//" + "Character" + "//DND" + charName);
CHARDIR.mkdir();
StreamResult result = new StreamResult(CHARDIR.getPath() + "//DND" + charName + ".xml");
transformer.transform(source, result);
}catch(Exception e){
}
// Output to console for testing
// StreamResult result = new StreamResult(System.out);
//TODO Refresh the character list when new Character is made
// add to random character*/
HomeWindow.loadCharacters();
System.out.println("File saved!");
} catch (Exception pce) {
pce.printStackTrace();
}
}
public Composite getWiz8() { return wiz8; }
}