/** * AshtaVarga.java * * Created on January 17, 2003, 10:19 AM * * @author E. Rajasekar * @version */ package app.astrosoft.core; import java.util.ArrayList; import java.util.EnumMap; import java.util.List; import java.util.Vector; import app.astrosoft.consts.AshtavargaName; import app.astrosoft.consts.AstrosoftTableColumn; import app.astrosoft.consts.DisplayStrings; import app.astrosoft.consts.Planet; import app.astrosoft.consts.Rasi; 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.MapTableRow; import app.astrosoft.ui.table.MapTableRowHelper; import app.astrosoft.ui.table.Table; import app.astrosoft.ui.table.TableData; import app.astrosoft.ui.table.TableDataFactory; import app.astrosoft.ui.table.TableRowData; public class Ashtavarga implements Exportable { private static int[] one = { 0, 2, 6, 9, 11, 12, 18, 22, 23, 26, 27, 29, 30, 31, 32, 34, 35, 36, 39, 41, 45, 47, 48, 55 }; private static int[] two = { 0, 2, 6, 10, 18, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 41, 45, 47, 48 }; private static int[] three = { 1, 3, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 23, 27, 29, 32, 36, 38, 41, 42, 43, 45, 46, 47, 49, 50, 54, 55 }; private static int[] four = { 0, 2, 6, 7, 11, 12, 13, 18, 22, 25, 26, 29, 30, 31, 32, 34, 35, 36, 39, 41, 45, 46, 47, 48, 55 }; private static int[] five = { 3, 4, 10, 11, 13, 14, 16, 19, 24, 27, 29, 33, 35, 37, 38, 39, 41, 42, 44, 43, 45, 46, 47, 52, 54, 50 }; private static int[] six = { 1, 3, 4, 5, 7, 8, 9, 10, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 27, 28, 31, 35, 37, 38, 39, 42, 43, 49, 50, 51, 52, 53, 54, 55 }; private static int[] seven = { 0, 2, 5, 6, 8, 9, 11, 12, 13, 18, 22, 26, 30, 32, 33, 34, 36, 39, 48 }; private static int[] eight = { 0, 2, 6, 8, 11, 12, 18, 21, 22, 25, 26, 28, 29, 30, 31, 32, 34, 36, 40, 41, 44, 45, 46, 47, 48, 51 }; private static int[] nine = { 0, 2, 3, 4, 6, 10, 13, 22, 24, 26, 27, 29, 30, 32, 33, 35, 37, 39, 41, 42, 43, 44, 45, 46, 47, 51 }; private static int[] ten = { 0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 20, 22, 23, 25, 26, 27, 30, 31, 32, 34, 35, 36, 37, 39, 44, 45, 46, 48, 50, 51, 55 }; private static int[] eleven = { 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 39, 33, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 }; private static int[] twelve = { 3, 5, 7, 12, 20, 21, 24, 27, 28, 38, 40, 41, 42, 51, 52, 53, 50 }; private static EnumMap<AshtavargaName, Integer> count; private static int[] rasiGunaVals = { 7, 10, 8, 4, 10, 5, 7, 8, 9, 5, 11, 12 }; private static int[] grahaGunaVals = { 5, 5, 8, 5, 10, 7, 5 }; Vector<int[]> v; private EnumMap<AshtavargaName, EnumMap<Rasi, Integer>> ashtavarga; private EnumMap<AshtavargaName, EnumMap<Rasi, Integer>> trikonaReduced; private EnumMap<AshtavargaName, EnumMap<Rasi, Integer>> ekathipathiyaReduced; private EnumMap<AshtavargaName, Integer> rasiGuna; private EnumMap<AshtavargaName, Integer> grahaGuna; private EnumMap<Planet, Integer> planetPos; /** Creates new AshtaVarga */ public Ashtavarga( EnumMap<Planet, Integer> pos ) { planetPos = pos; v = new Vector<int []>( ); v.add( one ); v.add( two ); v.add( three ); v.add( four ); v.add( five ); v.add( six ); v.add( seven ); v.add( eight ); v.add( nine ); v.add( ten ); v.add( eleven ); v.add( twelve ); computeAstavarga( ); calcSarvastaVarga( ); doTrikonaReduction( ); doEkathipathiyaReduction( ); calcGunakaras( ); initCount(); } private void initCount() { count = new EnumMap<AshtavargaName, Integer>(AshtavargaName.class); count.put(AshtavargaName.Sun, 48); count.put(AshtavargaName.Moon, 49); count.put(AshtavargaName.Mars, 39); count.put(AshtavargaName.Mercury, 54); count.put(AshtavargaName.Jupiter, 56); count.put(AshtavargaName.Venus, 52); count.put(AshtavargaName.Saturn, 39); } private int getParal( int houseNo, int vargaNo ) { int paral = 0; int[] varga = ( int[] ) ( v.elementAt( houseNo ) ); for ( int i = 0; i < varga.length; i++ ) { if ( varga[i] == vargaNo ) { paral = 1; break; } } return paral; } private void computeAstavarga( ) { ashtavarga = new EnumMap<AshtavargaName, EnumMap<Rasi, Integer>> (AshtavargaName.class); int diff = 0; int paral = 0; for ( Planet planet : Planet.majorPlanets() ) { EnumMap<Rasi, Integer> paralsInHouse = initParals(); for ( Rasi house : Rasi.values() ) { int total = 0; for ( Planet subpla : Planet.majorPlanetsAsc() ) { diff = ( (house.ordinal() + 1) - planetPos.get(subpla) + 12 ) % 12; paral = getParal( diff, ( 8 * planet.ordinal() ) + subpla.ashtavargaNo() ); total = total + paral; } paralsInHouse.put(house, total); } ashtavarga.put(AshtavargaName.ofPlanet(planet), paralsInHouse); } } private void calcSarvastaVarga( ) { int sum = 0; EnumMap<Rasi, Integer> paralsInHouse = new EnumMap<Rasi, Integer>(Rasi.class); for ( Rasi h : Rasi.values() ) { sum = 0; for ( Planet p : Planet.majorPlanets() ) { sum = sum + ashtavarga.get(AshtavargaName.ofPlanet(p)).get(h); } paralsInHouse.put(h, sum); } ashtavarga.put(AshtavargaName.SarvaAshtavarga, paralsInHouse); } private void doTrikonaReduction( ) { int i, j, k, min; trikonaReduced = new EnumMap<AshtavargaName, EnumMap<Rasi, Integer>> (AshtavargaName.class); for ( AshtavargaName ashtavargaName : ashtavarga.keySet() ) { EnumMap<Rasi, Integer> paralsInHouse = initParals(); EnumMap<Rasi, Integer> ashtavargaParals = ashtavarga.get(ashtavargaName); for ( Rasi h = Rasi.Mesha; (h != Rasi.Simha); h = h.next() ) { Rasi []trines = h.trines(); if (ashtavargaName == AshtavargaName.SarvaAshtavarga) { i = ashtavargaParals.get(trines[0]) % 12; j = ashtavargaParals.get(trines[1]) % 12; k = ashtavargaParals.get(trines[2]) % 12; }else{ i = ashtavargaParals.get(trines[0]); j = ashtavargaParals.get(trines[1]); k = ashtavargaParals.get(trines[2]); } if ( ( i == j ) && ( j == k ) ) { for(Rasi t : trines){ paralsInHouse.put(t, 0); } } else if ( ( ( i == 0 ) && ( j == 0 ) ) || ( ( i == 0 ) && ( k == 0 ) ) || ( ( k == 0 ) && ( j == 0 ) ) ) { for(Rasi t : trines){ paralsInHouse.put(t, 0); } } else { min = Math.min( Math.min( i, j ), k ); if ( i != min ) { paralsInHouse.put(trines[0], i - min); } if ( j != min ) { paralsInHouse.put(trines[1], j - min); } if ( k != min ) { paralsInHouse.put(trines[2], k - min); } } } trikonaReduced.put(ashtavargaName, paralsInHouse); } } private void doEkathipathiyaReduction( ) { Rasi i; Rasi j; ekathipathiyaReduced = new EnumMap<AshtavargaName, EnumMap<Rasi, Integer>> (AshtavargaName.class); for ( AshtavargaName ashtavargaName : ashtavarga.keySet()) { i = Rasi.Makara; j = Rasi.Kumbha; EnumMap<Rasi, Integer> paralsInHouse = initParals(); EnumMap<Rasi, Integer> trikonaParals = trikonaReduced.get(ashtavargaName); for ( ; (i != Rasi.Kataka); i = i.previous(), j = j.next() ) { int val1 = trikonaParals.get(i); int val2 = trikonaParals.get(j); if ( ( i == Rasi.Simha ) && ( j == Rasi.Kataka ) ) { paralsInHouse.put(i, val1); paralsInHouse.put(j, val2); } else if ( ( ( val1 == 0 ) || ( val2 == 0 ) ) || ( hasPlanet( i ) && hasPlanet( j ) ) ) { paralsInHouse.put(i, val1); paralsInHouse.put(j, val2); } else if ( hasPlanet( i ) && !hasPlanet( j ) ) { if ( val1 >= val2 ) { paralsInHouse.put(i, val1); paralsInHouse.put(j, 0); } else if ( val1 < val2 ) { paralsInHouse.put(i, val1); paralsInHouse.put(j, val1); } } else if ( !hasPlanet( i ) && hasPlanet( j ) ) { if ( val2 >= val1 ) { paralsInHouse.put(i, 0); paralsInHouse.put(j, val2); } else if ( val2 < val1 ) { paralsInHouse.put(i, val2); paralsInHouse.put(j, val2); } } else { // No planet in both if ( val1 == val2 ) { paralsInHouse.put(i, 0); paralsInHouse.put(j, 0); } else { if ( val1 < val2 ) { paralsInHouse.put(i, val1); paralsInHouse.put(j, val1); } else { paralsInHouse.put(i, val2); paralsInHouse.put(j, val2); } } } } ekathipathiyaReduced.put(ashtavargaName, paralsInHouse); } } private boolean hasPlanet( Rasi h ) { boolean res = false; int house = h.ordinal() + 1; for ( Planet p : Planet.majorPlanetsAsc() ){ if ( planetPos.get(p) == house ) { res = true; break; } } return res; } private void calcGunakaras( ) { rasiGuna = new EnumMap<AshtavargaName, Integer>(AshtavargaName.class); grahaGuna = new EnumMap<AshtavargaName, Integer>(AshtavargaName.class); int result = 0; for ( AshtavargaName ashtavargaName : ashtavarga.keySet() ) { EnumMap<Rasi, Integer> ekaParals = ekathipathiyaReduced.get(ashtavargaName); result = 0; for ( Rasi i : Rasi.values() ) { result = result + ( rasiGunaVals[i.ordinal()] * ekaParals.get(i) ); } rasiGuna.put(ashtavargaName ,result); result = 0; for ( Planet j : Planet.majorPlanets() ) { result = result + ( grahaGunaVals[j.ordinal()] * ekaParals.get(Rasi.ofIndex(planetPos.get(j) - 1)) ); } grahaGuna.put(ashtavargaName ,result); } } private EnumMap<Rasi, Integer> initParals(){ EnumMap<Rasi, Integer> vargas = new EnumMap<Rasi, Integer> (Rasi.class); for(Rasi h : Rasi.values()){ vargas.put(h, 0); } return vargas; } public static int getCount(AshtavargaName ashtavarga) { if (count.containsKey(ashtavarga)){ return count.get(ashtavarga); }else{ return -1; } } public Table getGunaTable(final AshtavargaName ashtavargaName){ final DefaultColumnMetaData colMetaData = new DefaultColumnMetaData(AstrosoftTableColumn.keyvalCols()); colMetaData.localizeColumns(); MapTableRowHelper helper = new MapTableRowHelper(colMetaData); List<MapTableRow> rows = new ArrayList<MapTableRow>(); int rasiGunaVal = rasiGuna.get(ashtavargaName); int grahaGunaVal = grahaGuna.get(ashtavargaName); rows.add(helper.createRow(DisplayStrings.RASI_GUNA_STR, rasiGunaVal)); rows.add(helper.createRow(DisplayStrings.GRAHA_GUNA_STR, grahaGunaVal)); rows.add(helper.createRow(DisplayStrings.SUTHDHA_BINDU_STR, (rasiGunaVal + grahaGunaVal))); final TableData<MapTableRow> data = TableDataFactory.getTableData(rows); Table gunaTable = new Table(){ public TableData<? extends TableRowData> getTableData() { return data; } public ColumnMetaData getColumnMetaData() { return colMetaData; } }; return gunaTable; } public EnumMap<Rasi, Integer> getAshtavarga(AshtavargaName name) { return ashtavarga.get(name); } public EnumMap<Rasi, Integer> getTrikona(AshtavargaName name) { return trikonaReduced.get(name); } public EnumMap<Rasi, Integer> getEkathipathiya(AshtavargaName name) { return ekathipathiyaReduced.get(name); } /** * @return Returns the grahaGuna. */ public int getGrahaGuna(AshtavargaName ast) { return grahaGuna.get(ast); } /** * @return Returns the rasiGuna. */ public int getRasiGuna(AshtavargaName ast) { return rasiGuna.get(ast); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Ashtavarga\n"); int sum = 0; int total = 0; for ( AshtavargaName ashtavargaName : ashtavarga.keySet() ) { sb.append( ashtavargaName + " Astavarga \n\n" ); sum = 0; for ( Rasi j : Rasi.values() ) { sum = sum + ashtavarga.get(ashtavargaName).get(j); sb.append(j + " --> " + ashtavarga.get(ashtavargaName).get(j) + "\n"); } sb.append("Sum " + sum + "\n\n"); total = total + sum; sb.append( "RasiGuna " + rasiGuna.get(ashtavargaName) + "\n"); sb.append( "GrahaGuna " + grahaGuna.get(ashtavargaName) + "\n"); } sb.append("\n"); sb.append( "Total " + total + "\n" ); return sb.toString(); } public static void main( String[] args ) { EnumMap<Planet, Integer> pos = new EnumMap<Planet, Integer>(Planet.class); pos.put(Planet.Sun, 8); pos.put(Planet.Moon, 10); pos.put(Planet.Mars, 9); pos.put(Planet.Mercury, 8); pos.put(Planet.Jupiter, 6); pos.put(Planet.Venus, 7); pos.put(Planet.Saturn, 6); pos.put(Planet.Rahu, 4); pos.put(Planet.Ketu, 10); pos.put(Planet.Ascendant, 6); Ashtavarga av = new Ashtavarga( pos ); System.out.println(av); } public void doExport(Exporter e) { e.export(this); } }