/**
* Muhurtha.java
* Created On 2005, Oct 15, 2005 4:02:12 PM
* @author Rajasekar E.
*/
package app.astrosoft.core;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.EnumMap;
import java.util.GregorianCalendar;
import java.util.List;
import swisseph.SweDate;
import app.astrosoft.beans.Interval;
import app.astrosoft.beans.MuhurthaBean;
import app.astrosoft.consts.DisplayFormat;
import app.astrosoft.consts.MuhurthaRank;
import app.astrosoft.consts.Nakshathra;
import app.astrosoft.consts.Rasi;
import app.astrosoft.ui.AstroSoft;
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.MuhurthaHelper;
/** Class for muhurtha calculations */
public class Muhurtha {
private double mDate;
private double startJulDay;
private double endJulDay;
private Rasi mRasi;
private Nakshathra mNak;
// Default value 2 months
private int incPeriod = 2;
private boolean filterByRasi = false;
private boolean filterByMuhurthaNaks = false;
private EnumMap <MuhurthaRank, List<Interval>> favLogitudes;
private List<Interval> transitPeriods;
public Muhurtha(Calendar date, Rasi rasi, Nakshathra nak){
//TODO Remove if muthurtha should start from today
date.add(Calendar.DATE, -2);
double muhurthaTime = AstroUtil.decimal(date.get(Calendar.HOUR), date.get(Calendar.MINUTE), date.get(Calendar.SECOND));// - AstroSoft.getPreferences().getPlace().timeZone();
SweDate sd = new SweDate(date.get(Calendar.YEAR), date.get(Calendar.MONTH) + 1, date.get(Calendar.DATE), muhurthaTime);
mDate = sd.getJulDay();
startJulDay = mDate;
mRasi = rasi;
mNak = nak;
}
public Muhurtha(Calendar date, Rasi rasi, Nakshathra nak, boolean filterByRasi, boolean filterByMuhurthaNaks){
this(date, rasi, nak);
this.filterByRasi = filterByRasi;
this.filterByMuhurthaNaks = filterByMuhurthaNaks;
}
public Muhurtha(Calendar date, Rasi rasi, Nakshathra nak, boolean filterByRasi, boolean filterByMuhurthaNaks, int incPeriod){
this(date, rasi, nak, filterByRasi,filterByMuhurthaNaks);
this.incPeriod = incPeriod;
}
public void setIncPeriod(int months) {
incPeriod = months;
}
public void calcMuhurtha(){
calcFavLongitudes();
//getNextTransitPeriods();
//getNextTransitPeriods();
}
private List<Interval> calcFavNakLongitudes() {
List<Interval> favNakLongitudes = new java.util.ArrayList <Interval> ();
int [] favNakPos = {1, 3, 5, 7, 8, 10, 12, 14, 16, 17, 19, 21, 23, 25, 26};
for(int i: favNakPos) {
favNakLongitudes.add(Nakshathra.degFor(mNak.absolute(i)));
}
//System.out.println("Fav Nak Longitudes: " + favNakLongitudes);
return favNakLongitudes;
}
private List<Interval> calcFavRasiLongitudes() {
List<Interval> favRasiLongitudes = new java.util.ArrayList <Interval> ();
int [] favRasiPos = {0,2,6,9,10};
for(int i: favRasiPos) {
favRasiLongitudes.add(Rasi.longitudeForRasi(mRasi.absolute(i)));
}
//System.out.println("Fav Rasi Longitudes: " + favRasiLongitudes);
return favRasiLongitudes;
}
private List<Interval> calcFavMuhurthaLongitudes(MuhurthaRank rank) {
List<Interval> favMuhurthaLongitudes = new java.util.ArrayList <Interval> ();
for(Nakshathra nak : Nakshathra.muhurtaNakshathras(rank)) {
favMuhurthaLongitudes.add(Nakshathra.degFor(nak));
}
//System.out.println("Fav Muhurtha Longitudes with rank: " + rank + " - " + favMuhurthaLongitudes);
return favMuhurthaLongitudes;
}
private void calcFavLongitudes(){
favLogitudes = new EnumMap<MuhurthaRank, List<Interval>> (MuhurthaRank.class);
List<Interval> favNakLongitudes = calcFavNakLongitudes();
favLogitudes.put(MuhurthaRank.VeryGood, favNakLongitudes);
if (filterByRasi){
favLogitudes.put(MuhurthaRank.VeryGood, Interval.intersection(favNakLongitudes, calcFavRasiLongitudes()));
}
//System.out.println("Fav Longitudes after rasi filter ->" + favLogitudes);
List<Interval> rasiFilteredfavNakLongitudes = favLogitudes.get(MuhurthaRank.VeryGood);
if (filterByMuhurthaNaks){
for(MuhurthaRank r : MuhurthaRank.values()){
List<Interval> favMuhurthaLongitudes = calcFavMuhurthaLongitudes(r);
favLogitudes.put(r,
Interval.intersection(rasiFilteredfavNakLongitudes,
favMuhurthaLongitudes));
}
}
//System.out.println("Fav Longs: " + favLogitudes);
}
public TableData<? extends TableRowData> getNextTransitPeriods() {
MuhurthaHelper muhurthaHelper = new MuhurthaHelper(favLogitudes);
endJulDay = AstroUtil.incJulDate(startJulDay, 0, incPeriod, 0);
Interval period = new Interval(startJulDay, endJulDay);
List <MuhurthaBean>muhurthaList = muhurthaHelper.getTransists(period);
//System.out.println(muhurthaList);
//Collections.sort(muhurthaList, MuhurthaBean.getComparator(AstrosoftTableColumn.Period), false);
//System.out.println(muhurthaList);
//Collections.sort(muhurthaList, MuhurthaBean.getComparator(AstrosoftTableColumn.Rank));
//System.out.println(muhurthaList);
startJulDay = endJulDay;
return TableDataFactory.getTableData(muhurthaList);
}
public void printFavLongitudes(){
for(MuhurthaRank r: favLogitudes.keySet()){
System.out.println("************** " + r + " ****************");
for(Interval i : favLogitudes.get(r)){
System.out.println(i.toString(DisplayFormat.DEG));
}
System.out.println("*****************************************");
}
}
public static void main(String[] args) {
//GregorianCalendar today = new GregorianCalendar(2005, 11,01);
//Muhurtha m = new Muhurtha(AstroSoft.today, Rasi.Mesha, Nakshathra.Mrigasira, false, true);
Muhurtha m = new Muhurtha(new GregorianCalendar(2005, 11,01), Rasi.Vrishabha, Nakshathra.Rohini, false, true);
m.calcMuhurtha();
m.printFavLongitudes();
System.out.println(m.getNextTransitPeriods());
/*EnumMap <MuhurthaRank, List<Interval>> longs = new EnumMap(MuhurthaRank.class);
List<Interval> l = new ArrayList<Interval>();
l.add(new Interval((30.0/2.25),(30.0/2.25) ));
longs.put(MuhurthaRank.VeryGood, l);
MuhurthaHelper helper = new MuhurthaHelper(longs);
m.endJulDay = AstroUtil.incJulDate(m.startJulDay, 0, m.incPeriod, 0);
Interval period = new Interval(m.startJulDay, m.endJulDay);
System.out.println(helper.getTransists(period));*/
}
}