package br.com.while42.rpgcs.model.character;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import android.util.Log;
import br.com.while42.rpgcs.model.equip.Equipments;
public class RpgCharacter implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String image;
private Characteristics characteristics;
private RpgClass classes;
private Abilities abilities;
private Defences defences;
private SavingThrows savingThrows;
private Skills skills;
private Languages languages;
private Money money;
//private Attacks attacks;
//private Armors armors;
private Equipments equipments;
private Notes notes;
private Integer baseAttackBonus;
private Integer grapple;
// TODO: Imutability
public RpgCharacter(Characteristics characteristics) {
this.characteristics = characteristics;
this.id = 0L;
this.image = "";
this.classes = new RpgClass();
this.abilities = new Abilities();
this.defences = new Defences();
this.savingThrows = new SavingThrows();
this.skills = new Skills();
this.languages = new Languages();
this.money = new Money();
//this.attacks = new Attacks(abilities);
//this.armors = new Armors();
this.equipments = new Equipments();
this.notes = new Notes();
this.baseAttackBonus = 0;
this.grapple = 0;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public boolean isPersistent() {
return getId() != 0;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public void setRpgClasses(RpgClass classes) {
this.classes = classes;
}
public RpgClass getRpgClasses() {
return classes;
}
public void setAbilities(Abilities abilities) {
this.abilities = abilities;
}
public Abilities getAbilities() {
return abilities;
}
public void setDefences(Defences defences) {
this.defences = defences;
}
public Defences getDefences() {
return defences;
}
public void setCharacteristics(Characteristics characteristics) {
this.characteristics = characteristics;
}
public Characteristics getCharacteristics() {
return characteristics;
}
public void setSavingThrows(SavingThrows savingThrows) {
this.savingThrows = savingThrows;
}
public SavingThrows getSavingThrows() {
return savingThrows;
}
public Skills getSkills() {
return skills;
}
public void setSkills(Skills skills) {
this.skills = skills;
}
public Languages getLanguages() {
return languages;
}
public void setLanguages(Languages languages) {
this.languages = languages;
}
public void setMoney(Money money) {
this.money = money;
}
public Money getMoney() {
return money;
}
/*
public void setAttacks(Attacks attaks) {
this.attacks = attaks;
}
public Attacks getAttacks() {
return attacks;
}
*/
public Equipments getEquipments() {
return equipments;
}
public Notes getNotes() {
return notes;
}
public void setNotes(Notes notes) {
this.notes = notes;
}
public static byte[] serialize(RpgCharacter rpgCharacter) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(rpgCharacter);
out.close();
// Get the bytes of the serialized object
byte[] buf = bos.toByteArray();
return buf;
} catch(IOException ioe) {
Log.e("serializeObject", "error", ioe);
return null;
}
}
public static RpgCharacter deserialize(byte[] s) {
try {
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(s));
RpgCharacter rpgCharacter = (RpgCharacter) in.readObject();
in.close();
return rpgCharacter;
} catch(ClassNotFoundException cnfe) {
Log.e("deserializeObject", "class not found error", cnfe);
return null;
} catch(IOException ioe) {
Log.e("deserializeObject", "io error", ioe);
return null;
}
}
@Override
public boolean equals(Object rpgCharacter) {
if (this == rpgCharacter)
return true;
if (!(rpgCharacter instanceof RpgCharacter))
return false;
RpgCharacter rc = (RpgCharacter) rpgCharacter;
return (id.equals(rc.id) &&
image.equals(rc.image) &&
classes.equals(rc.classes) &&
characteristics.equals(rc.characteristics) &&
abilities.equals(rc.abilities) &&
defences.equals(rc.defences) &&
savingThrows.equals(rc.savingThrows) &&
skills.equals(rc.skills) &&
languages.equals(rc.languages) &&
money.equals(rc.money) &&
//attacks.equals(rc.attacks) &&
//armors.equals(rc.armors) &&
equipments.equals(rc.equipments) &&
notes.equals(rc.notes) &&
baseAttackBonus.equals(rc.baseAttackBonus) &&
grapple.equals(rc.grapple) );
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(" id: ").append(id);
sb.append(" classes: ").append(classes);
sb.append(" characteristics: ").append(characteristics);
sb.append(" abilities: ").append(abilities);
sb.append(" defences: ").append(defences);
sb.append(" savingThrows: ").append(savingThrows);
sb.append(" skills: ").append(skills);
sb.append(" languages: ").append(languages);
sb.append(" money: ").append(money);
//sb.append(" attacks: ").append(attacks);
//sb.append(" armors: ").append(armors);
sb.append(" equipments: ").append(equipments);
sb.append(" notes: ").append(notes);
return sb.toString();
}
}