/** * HousePosition.java * Created On 2006, Feb 24, 2006 1:35:42 PM * @author E. Rajasekar */ package app.astrosoft.beans; import app.astrosoft.consts.AstrosoftTableColumn; import app.astrosoft.consts.Rasi; import app.astrosoft.consts.Roman; import app.astrosoft.export.Exportable; import app.astrosoft.export.Exporter; import app.astrosoft.ui.table.ColumnMetaData; import app.astrosoft.ui.table.DefaultColumnMetaData; import app.astrosoft.ui.table.TableData; import app.astrosoft.ui.table.TableDataFactory; import app.astrosoft.ui.table.TableRowData; import app.astrosoft.util.AstroUtil; import app.astrosoft.util.Mod; public class HousePosition implements Exportable { public class Bhava implements TableRowData { Rasi house; int bhava; double start; double mid; double end; double length; public Bhava(int bhava, double start, double mid, double end) { this.bhava = bhava; this.start = start; this.mid = mid; this.end = end; this.length = mod.sub(end, start); house = Rasi.ofDeg(mid); } public int bhava() { return bhava; } public Rasi house(){ return house; } public double start() { return start; } public double mid() { return mid; } public double end() { return end; } public double length() { return length; } public Object getColumnData(AstrosoftTableColumn col) { switch (col) { case House : return Roman.of(bhava()); case Bhava: return house; case Start : return start(); case Mid : return mid(); case End : return end(); case Length : return length(); default : return null; } } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(bhava + "\t"); sb.append(AstroUtil.dms(start) + "\t"); sb.append(AstroUtil.dms(mid) + "\t"); sb.append(AstroUtil.dms(end) + "\t"); sb.append(AstroUtil.dms(length) + "\n"); return sb.toString(); } } private Mod mod = new Mod(360); private Bhava[] housePositions = new Bhava[12]; private double ascendant; private double siderealTime; private TableData<Bhava> bhavaTableData; private DefaultColumnMetaData bhavaTableColumnData; public HousePosition(double positions[]) { double start = mod.add(positions[12], (mod.sub(positions[1], positions[12]) / 2)); double end = 0.0; ascendant = positions[1]; // postion starts from 1 for (int i = 1; i < positions.length - 1; i++) { end = mod.add(positions[i], (mod .sub(positions[i + 1], positions[i]) / 2)); housePositions[i - 1] = new Bhava(i, start, positions[i], end); start = end; } end = mod .add(positions[12], (mod.sub(positions[1], positions[12]) / 2)); housePositions[11] = new Bhava(12, start, positions[12], end); // System.out.println(verifyLength()); } public Rasi locateHouse(double deg) { int house = -1; // FIXME: See if we can get it from somewhere Rasi lagna = Rasi.ofDeg(ascendant); double start = housePositions[0].start(); double end = 0; // System.out.println("deg: " + deg + " start: " + start); if (deg < start) { deg = deg + 360; } for (Bhava b : housePositions) { // System.out.println(b); end = start + b.length(); // System.out.println("< " + start + " , " + end + " >"); if (deg <= end && deg >= start) { house = b.bhava() - 1; break; } else { start = end; } } // System.out.println("lagna: " + lagna + " house: " + house); return lagna.absolute(house); } public Bhava[] getHousePositions() { return housePositions; } /** Note starts with 1 not 0 **/ public Bhava getBhava(int i){ return housePositions[i - 1]; } public double getAscendantPosition() { return ascendant; } public Rasi getAscendant(){ return Rasi.ofDeg(ascendant); } /** * @param siderealTime * The siderealTime to set. */ public void setSiderealTime(double siderealTime) { this.siderealTime = siderealTime; } /** * @return Returns the siderealTime. */ public double getSiderealTime() { return siderealTime; } public TableData<Bhava> getBhavaTableData() { if (bhavaTableData == null) { bhavaTableData = TableDataFactory.getTableData(housePositions); } return bhavaTableData; } public ColumnMetaData getBhavaTableColumnData() { if (bhavaTableColumnData == null) { bhavaTableColumnData = new DefaultColumnMetaData( AstrosoftTableColumn.House, AstrosoftTableColumn.Bhava, AstrosoftTableColumn.Start,AstrosoftTableColumn.Mid, AstrosoftTableColumn.End,AstrosoftTableColumn.Length) { @Override public Class getColumnClass(AstrosoftTableColumn col) { switch (col) { case Start : case Mid : case End : case Length : return Degree.class; case House: return Roman.class; } return super.getColumnClass(col); } }; bhavaTableColumnData.localizeColumns(); } return bhavaTableColumnData; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Ascendant: " + AstroUtil.dms(ascendant) + "\n"); sb.append("Sidereal Time: " + AstroUtil.dms(siderealTime) + "\n"); for (Bhava b : housePositions) { sb.append(b + "\n"); } return sb.toString(); } private boolean verifyLength() { double length = 0.0; for (Bhava b : housePositions) { length = length + b.length(); } return (length == 360.00); } public void doExport(Exporter e) { e.export(this); } }