/**
* HoroscopeExporter.java
* Created On 2007, Jun 12, 2007 12:51:36 PM
* @author E. Rajasekar
*/
package app.astrosoft.export;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.Writer;
import java.text.Format;
import java.util.EnumMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;
import javax.xml.stream.events.Attribute;
import app.astrosoft.beans.AshtaVargaChartData;
import app.astrosoft.beans.Degree;
import app.astrosoft.beans.HousePosition;
import app.astrosoft.beans.PlanetChartData;
import app.astrosoft.beans.PlanetaryInfo;
import app.astrosoft.consts.AshtavargaName;
import app.astrosoft.consts.AstrosoftTableColumn;
import app.astrosoft.consts.Ayanamsa;
import app.astrosoft.consts.DisplayStrings;
import app.astrosoft.consts.Language;
import app.astrosoft.consts.Planet;
import app.astrosoft.consts.Rasi;
import app.astrosoft.consts.Varga;
import app.astrosoft.consts.XmlConsts;
import app.astrosoft.core.Ashtavarga;
import app.astrosoft.core.Dasa;
import app.astrosoft.core.Horoscope;
import app.astrosoft.core.ShadBala;
import app.astrosoft.core.Vimshottari;
import app.astrosoft.pref.AstrosoftPref;
import app.astrosoft.ui.AstroSoft;
import app.astrosoft.ui.table.ColumnMetaData;
import app.astrosoft.ui.table.Table;
import app.astrosoft.ui.table.TableData;
import app.astrosoft.ui.table.TableDataFactory;
import app.astrosoft.ui.table.TableRowData;
import app.astrosoft.util.AstroUtil;
/**
* HoroscopeExporter exports Horoscope as XML data.
* This class is designed based on visitor pattern.
* This class implements Exporter ( Visitor ) interface.
* Each class that needs to be exported implements Exportable interface.
*
* This class implements Exporter interface and visit() method
* writes passed object to xml.
*
* @author Raja
*
*/
public class HoroscopeExporter extends AbstractExporter {
private static final Logger log = Logger.getLogger(HoroscopeExporter.class.getName());
public HoroscopeExporter(String file) {
super(file);
}
public void export(AshtaVargaChartData ashtavargaChart) {
try {
xmlWriter.add(xmlef.createStartElement(XmlConsts.ASHTVARGA_CHART_TAG, null,null));
xmlWriter.add(xmlef.createAttribute(XmlConsts.Name, ashtavargaChart.getChartName()));
EnumMap<Rasi, Integer> varga = ashtavargaChart.getVarga();
for(Rasi rasi : varga.keySet()){
xmlWriter.add(xmlef.createStartElement(XmlConsts.ASHTVARGA_HOUSE_TAG, null,null));
xmlWriter.add(xmlef.createAttribute(XmlConsts.Number, String.valueOf(rasi.ordinal()+1)));
xmlWriter.add(xmlef.createCharacters(varga.get(rasi).toString()));
xmlWriter.add(xmlef.createEndElement(XmlConsts.ASHTVARGA_HOUSE_TAG, null));
}
xmlWriter.add(xmlef.createEndElement(XmlConsts.ASHTVARGA_CHART_TAG, null));
}catch(Exception e){
log.log(Level.SEVERE, "Exception in writing chart xml ", e);
}
}
public void export(PlanetaryInfo planetaryInfo) {
exportTableData(planetaryInfo.getPlanateryInfoTableData(), planetaryInfo.getPlanateryInfoColumnMetaData(), XmlConsts.PLANETARY_POS_TAG, XmlConsts.PLANET_POS_TAG);
}
public void export(HousePosition housePosition) {
exportTableData(housePosition.getBhavaTableData(), housePosition.getBhavaTableColumnData(), XmlConsts.BHAVA_POSITIONS_TAG, XmlConsts.BHAVA_POS_TAG);
}
public void export(Ashtavarga ashtavarga){
try {
xmlWriter.add(xmlef.createStartElement(XmlConsts.ASHTAVARGAS_TAG, null,null));
for(AshtavargaName name : AshtavargaName.ashtavargas()){
xmlWriter.add(xmlef.createStartElement(XmlConsts.ASHTAVARGA_TAG, null,null));
xmlWriter.add(xmlef.createAttribute(XmlConsts.Name, name.name()));
new AshtaVargaChartData(name, ashtavarga.getAshtavarga(name)).doExport(this);
new AshtaVargaChartData(AshtavargaName.Trikona, ashtavarga.getTrikona(name)).doExport(this);
new AshtaVargaChartData(AshtavargaName.Ekathipathya, ashtavarga.getEkathipathiya(name)).doExport(this);
if(name != AshtavargaName.SarvaAshtavarga) {
exportTableData(ashtavarga.getGunaTable(name).getTableData(), XmlConsts.GUNAHARAS_TAG, XmlConsts.GUNAHARA_TAG);
}
xmlWriter.add(xmlef.createEndElement(XmlConsts.ASHTAVARGA_TAG, null));
}
xmlWriter.add(xmlef.createEndElement(XmlConsts.ASHTAVARGAS_TAG, null));
}catch(Exception e){
log.log(Level.SEVERE, "Exception in writing ashtavarga xml ", e);
}
}
public void export(ShadBala shadBala){
try {
xmlWriter.add(xmlef.createStartElement(XmlConsts.SHADBALAS_TAG, null,null));
exportTableData(TableDataFactory.getReversedTable(shadBala.getPlanetBalaTableData(), shadBala.getPlanetBalaColumnMetaData(), AstrosoftTableColumn.Planet, AstrosoftTableColumn.Name), XmlConsts.SHADBALA, XmlConsts.BALA_TAG);
exportTableData(TableDataFactory.getReversedTable(shadBala.getPlanetBalaTableData(), shadBala.getSthanaBalaColumnMetaData(), AstrosoftTableColumn.Planet, AstrosoftTableColumn.Name), XmlConsts.STHANABALA_TAG, XmlConsts.BALA_TAG);
exportTableData(TableDataFactory.getReversedTable(shadBala.getPlanetBalaTableData(), shadBala.getKalaBalaColumnMetaData(), AstrosoftTableColumn.Planet, AstrosoftTableColumn.Name), XmlConsts.KALABALA_TAG, XmlConsts.BALA_TAG);
exportTableData(shadBala.getBhavaBalaTableData(), shadBala.getBhavaBalaColumnMetaData(), XmlConsts.BHAVABALA_TAG, XmlConsts.BALA_TAG);
xmlWriter.add(xmlef.createEndElement(XmlConsts.SHADBALAS_TAG, null));
}catch(Exception e){
log.log(Level.SEVERE, "Exception in writing shadbala xml ", e);
}
}
private void exportVargaCharts(PlanetaryInfo planetaryInfo) {
try {
xmlWriter.add(xmlef.createStartElement(XmlConsts.VARGA_CHART_TAG, null,null));
for(Varga varga : Varga.values()) {
new PlanetChartData(varga,planetaryInfo).doExport(this);
}
xmlWriter.add(xmlef.createEndElement(XmlConsts.VARGA_CHART_TAG, null));
}catch(Exception e){
log.log(Level.SEVERE, "Exception in writing varga charts", e);
}
}
public void export(Vimshottari v) {
try {
xmlWriter.add(xmlef.createStartElement(XmlConsts.VIM_DASA_TAG, null,null));
EnumMap<Planet, Dasa> dasa = v.getDasa();
StringBuilder attrVal = null;
for(Planet p : Planet.dasaLords(v.getStartLord())){
Dasa d = dasa.get(p);
xmlWriter.add(xmlef.createStartElement(XmlConsts.MAJOR_DASA_TAG, null,null));
xmlWriter.add(xmlef.createAttribute(XmlConsts.Dasa, p.name() + " " + XmlConsts.Dasa));
attrVal = new StringBuilder(" ( ");
//attrVal.append(" " + XmlConsts.Dasa);
attrVal.append(d.getStartDate());
attrVal.append(" ~ ");
attrVal.append(d.getEndDate());
attrVal.append(" )");
xmlWriter.add(xmlef.createAttribute(XmlConsts.Period, attrVal.toString()));
for(Dasa sd : d.subDasas()) {
attrVal = new StringBuilder(sd.fullDasa());
attrVal.append(" ( ");
attrVal.append(sd.getStartDate());
attrVal.append(" ~ ");
attrVal.append(sd.getEndDate());
attrVal.append(" )");
Attribute subDasa = xmlef.createAttribute(XmlConsts.Dasa, attrVal.toString() );
exportTableData(v.getVimDasaTableData(sd),Vimshottari.getVimDasaTableColumnMetaData(), XmlConsts.SUB_DASA_TAG, subDasa, XmlConsts.ANTHARA_DASA_TAG);
}
xmlWriter.add(xmlef.createEndElement(XmlConsts.MAJOR_DASA_TAG, null));
}
xmlWriter.add(xmlef.createEndElement(XmlConsts.VIM_DASA_TAG, null));
}catch(Exception e){
log.log(Level.SEVERE, "Exception in writing vimshottari dasa", e);
}
}
public void export(Horoscope horoscope) {
try {
//Create document and write horoscope tag
xmlWriter.add(xmlef.createStartDocument());
xmlWriter.add(xmlef.createStartElement(XmlConsts.ASTROSOFT_TAG, null,null));
xmlWriter.add(xmlef.createNamespace("xsi",XmlConsts.XML_NS));
xmlWriter.add(xmlef.createNamespace("av", XmlConsts.ASHTAVARGA_XML_NS));
xmlWriter.add(xmlef.createStartElement(XmlConsts.HOROSCOPE_TAG, null,null));
xmlWriter.add(xmlef.createAttribute(XmlConsts.Title, horoscope.getTitle()));
exportTableData(horoscope.getInfoTableData(), XmlConsts.HOROSCOPE_INFO_TAG, XmlConsts.INFO_TAG);
horoscope.getPlanetaryInfo().doExport(this);
horoscope.getHousePosition().doExport(this);
exportVargaCharts(horoscope.getPlanetaryInfo());
horoscope.getAshtaVarga().doExport(this);
horoscope.getShadBala().doExport(this);
horoscope.getVimshottariDasa().doExport(this);
//End horoscope tag and document
xmlWriter.add(xmlef.createEndElement(XmlConsts.HOROSCOPE_TAG, null));
xmlWriter.add(xmlef.createEndDocument());
xmlWriter.close();
}catch(Exception e){
log.log(Level.SEVERE, "Exception in writing horosocope xml document", e);
}
}
public static void main(String[] args) {
AstroSoft.getPreferences().setAyanamsa(Ayanamsa.KRISHNAMURTHI);
AstroSoft.getPreferences().setLanguage(Language.TAMIL);
Horoscope h = new Horoscope("Raja", 11, 12, 1980, 1, 44,
77 + (44.00 / 60.00), 11 + (22.00 / 60.00), 5.5, "Erode");
/*Horoscope h = new Horoscope("Mani", 10, 8, 1960, 5, 30,
77 + (44.00 / 60.00), 11 + (22.00 / 60.00), 5.5, "Erode");*/
/*Horoscope h = new Horoscope("Elango", 17, 4, 1957, 7, 10,
77 + (44.00 / 60.00), 11 + (22.00 / 60.00), 5.5, "Erode");*/
String file = "c:/astrosoft/resources/export/astrosoft.xml";
HoroscopeExporter horoscopeExporter = new HoroscopeExporter(file);
horoscopeExporter.export2Xml(h);
FOPTransformer.exportToPDF(file, "C:/AstroSoft/resources/export/horoscope2pdf.xsl", "C:/AstroSoft/resources/export/astrosoft.pdf");
}
}