/**
* ChartData.java
* Created On 2006, Mar 30, 2006 7:03:52 PM
* @author E. Rajasekar
*/
package app.astrosoft.beans;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.attribute.standard.Chromaticity;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.events.XMLEvent;
import app.astrosoft.consts.AstrosoftTableColumn;
import app.astrosoft.consts.DisplayFormat;
import app.astrosoft.consts.DisplayStrings;
import app.astrosoft.consts.Planet;
import app.astrosoft.consts.Rasi;
import app.astrosoft.consts.Varga;
import app.astrosoft.consts.XmlConsts;
import app.astrosoft.core.Horoscope;
import app.astrosoft.export.HoroscopeExporter;
import app.astrosoft.export.StaxProcessor;
import app.astrosoft.export.Exportable;
import app.astrosoft.export.Exporter;
import app.astrosoft.ui.table.Cell;
import app.astrosoft.ui.table.ColumnMetaData;
import app.astrosoft.ui.table.DefaultColumnMetaData;
import app.astrosoft.ui.table.Table;
import app.astrosoft.ui.table.TableData;
import app.astrosoft.ui.table.TableRowData;
import app.astrosoft.util.Utils;
public class PlanetChartData extends AbstractChartData implements Exportable {
private static final Logger log = Logger.getLogger(PlanetChartData.class.getName());
private EnumMap<Planet, Boolean> planetDir;
private EnumMap<Rasi, List<Planet>> planetsInRasi;
private Varga varga;
public PlanetChartData(Varga varga, PlanetaryInfo planetaryInfo) {
this(varga, planetaryInfo.getDivChart(varga),planetaryInfo.getPlanetDirection());
}
public PlanetChartData(Varga varga, EnumMap<Planet, Integer> planetPos, EnumMap<Planet, Boolean> planetDir){
super(varga.toString());
this.varga = varga;
this.planetDir = planetDir;
this.ascendant = Rasi.ofIndex(planetPos.get(Planet.Ascendant) - 1);
planetsInRasi = calcPlanetsInRasi(planetPos);
}
public static EnumMap<Rasi, List<Planet>> calcPlanetsInRasi(EnumMap<Planet, Integer> planetPosition){
EnumMap<Rasi, List<Planet>> planetsInRasi = new EnumMap<Rasi, List<Planet>>(Rasi.class);
List<Planet> planetList = null;
for (Planet p : Planet.planetsAsc()) {
Rasi r = Rasi.ofIndex(planetPosition.get(p) - 1);
if (planetsInRasi.containsKey(r)){
planetList = planetsInRasi.get(r);
planetList.add(p);
}else{
planetList = new ArrayList<Planet>();
planetList.add(p);
planetsInRasi.put(r, planetList);
}
}
return planetsInRasi;
}
public Set<Rasi> getHouses() {
return planetsInRasi.keySet();
}
public Map<Cell, Planet> getCells(List<Planet> planets){
Map<Cell, Planet> cells = new HashMap<Cell, Planet>();
if(planets == null || planets.size() == 0){
return cells;
}
switch(planets.size()){
case 1: cells.put(new Cell(1,AstrosoftTableColumn.C2), planets.get(0));
break;
case 2: cells.put(new Cell(0,AstrosoftTableColumn.C1), planets.get(0));
cells.put(new Cell(2,AstrosoftTableColumn.C3), planets.get(1));
break;
case 3: cells.put(new Cell(0,AstrosoftTableColumn.C2), planets.get(0));
cells.put(new Cell(2,AstrosoftTableColumn.C1), planets.get(1));
cells.put(new Cell(2,AstrosoftTableColumn.C3), planets.get(2));
break;
case 4: cells.put(new Cell(0,AstrosoftTableColumn.C1), planets.get(0));
cells.put(new Cell(0,AstrosoftTableColumn.C3), planets.get(1));
cells.put(new Cell(2,AstrosoftTableColumn.C1), planets.get(2));
cells.put(new Cell(2,AstrosoftTableColumn.C3), planets.get(3));
break;
case 5: cells.put(new Cell(0,AstrosoftTableColumn.C1), planets.get(0));
cells.put(new Cell(0,AstrosoftTableColumn.C3), planets.get(1));
cells.put(new Cell(2,AstrosoftTableColumn.C1), planets.get(2));
cells.put(new Cell(2,AstrosoftTableColumn.C3), planets.get(3));
cells.put(new Cell(1,AstrosoftTableColumn.C2), planets.get(4));
break;
case 6: cells.put(new Cell(0,AstrosoftTableColumn.C1), planets.get(0));
cells.put(new Cell(0,AstrosoftTableColumn.C3), planets.get(1));
cells.put(new Cell(2,AstrosoftTableColumn.C1), planets.get(2));
cells.put(new Cell(2,AstrosoftTableColumn.C3), planets.get(3));
cells.put(new Cell(0,AstrosoftTableColumn.C2), planets.get(4));
cells.put(new Cell(2,AstrosoftTableColumn.C2), planets.get(5));
break;
case 7: cells.put(new Cell(0,AstrosoftTableColumn.C1), planets.get(0));
cells.put(new Cell(0,AstrosoftTableColumn.C3), planets.get(1));
cells.put(new Cell(2,AstrosoftTableColumn.C1), planets.get(2));
cells.put(new Cell(2,AstrosoftTableColumn.C3), planets.get(3));
cells.put(new Cell(0,AstrosoftTableColumn.C2), planets.get(4));
cells.put(new Cell(2,AstrosoftTableColumn.C2), planets.get(5));
cells.put(new Cell(1,AstrosoftTableColumn.C2), planets.get(6));
break;
case 8: cells.put(new Cell(0,AstrosoftTableColumn.C1), planets.get(0));
cells.put(new Cell(0,AstrosoftTableColumn.C3), planets.get(1));
cells.put(new Cell(2,AstrosoftTableColumn.C1), planets.get(2));
cells.put(new Cell(2,AstrosoftTableColumn.C3), planets.get(3));
cells.put(new Cell(0,AstrosoftTableColumn.C2), planets.get(4));
cells.put(new Cell(2,AstrosoftTableColumn.C2), planets.get(5));
cells.put(new Cell(1,AstrosoftTableColumn.C1), planets.get(6));
cells.put(new Cell(1,AstrosoftTableColumn.C3), planets.get(7));
break;
case 9:
default:cells.put(new Cell(0,AstrosoftTableColumn.C1), planets.get(0));
cells.put(new Cell(0,AstrosoftTableColumn.C3), planets.get(1));
cells.put(new Cell(0,AstrosoftTableColumn.C2), planets.get(4));
cells.put(new Cell(2,AstrosoftTableColumn.C1), planets.get(2));
cells.put(new Cell(2,AstrosoftTableColumn.C3), planets.get(3));
cells.put(new Cell(2,AstrosoftTableColumn.C2), planets.get(5));
cells.put(new Cell(1,AstrosoftTableColumn.C1), planets.get(6));
cells.put(new Cell(1,AstrosoftTableColumn.C2), planets.get(7));
cells.put(new Cell(1,AstrosoftTableColumn.C3), planets.get(8));
break;
}
return cells;
}
/* (non-Javadoc)
* @see app.astrosoft.beans.ChartData#getChartHouseTable(app.astrosoft.consts.Rasi)
*/
public Table getChartHouseTable(Rasi rasi){
return new ChartHouseTable(rasi);
}
public EnumMap<Rasi, List<Planet>> getPlanetsInRasi() {
return planetsInRasi;
}
@Override
public DefaultColumnMetaData getHouseTableColMetaData() {
return new DefaultColumnMetaData(AstrosoftTableColumn.chartHouseCols()){
@Override
public Class getColumnClass(AstrosoftTableColumn col) {
return Planet.class;
}
};
}
public boolean highlightRetrogrades(){
if (varga == Varga.Rasi || varga == Varga.Navamsa || varga == Varga.Bhava){
return true;
}else{
return false;
}
}
public EnumMap<Planet, Boolean> getPlanetDir() {
return planetDir;
}
private class ChartHouseTable implements Table{
private Map<Cell, Planet> cells;
public ChartHouseTable(Rasi rasi) {
List<Planet> planets = planetsInRasi.get(rasi);
cells = getCells(planets);
}
public TableData<ChartHouseRow> getTableData() {
return new ChartHouseData(cells);
}
public ColumnMetaData getColumnMetaData() {
return colMetaData;
}
}
private class ChartHouseData implements TableData<ChartHouseRow>{
private Map<Cell, Planet> cells;
public ChartHouseData(Map<Cell, Planet> cells) {
this.cells = cells;
}
public ChartHouseRow getRow(int index) {
return new ChartHouseRow(index, cells);
}
public int getRowCount() {
return 3;
}
}
private class ChartHouseRow implements TableRowData{
private Map<Cell, Planet> cells;
private int row;
public ChartHouseRow(int row, Map<Cell, Planet> cells) {
this.cells = cells;
this.row = row;
}
public Object getColumnData(AstrosoftTableColumn col) {
Planet data = null;
Cell cell = new Cell(row, col);
if (cells.containsKey(cell)){
data = cells.get(cell);
}
return data;
}
}
public void doExport(Exporter e){
e.export(this);
}
public static void main(String[] args) {
Horoscope h = new Horoscope("Raja" , 11, 12, 1980, 1, 44, Place.getDefault());
EnumMap<Planet, Integer> pos = new EnumMap<Planet, Integer>(Planet.class);
pos.put(Planet.Sun, 1);
pos.put(Planet.Moon, 1);
pos.put(Planet.Mars, 1);
pos.put(Planet.Mercury, 1);
pos.put(Planet.Jupiter, 1);
pos.put(Planet.Venus, 1);
pos.put(Planet.Saturn, 1);
pos.put(Planet.Rahu, 1);
pos.put(Planet.Ketu, 1);
pos.put(Planet.Ascendant, 1);
/*for (Planet p : Planet.planetsAsc()) {
planetPos.put(p, 1);
}*/
//PlanetChartData cd = new PlanetChartData("Rasi" , h.getDivChart(Varga.Rasi), h.getPlanetDirection(), DisplayFormat.FULL_NAME);
PlanetChartData cd = new PlanetChartData(Varga.Rasi , h.getPlanetaryInfo());
//System.out.println(cd);
}
}