/**
* Rasi.java
* Created On 2005, Oct 20, 2005 8:18:06 PM
* @author E. Rajasekar
*/
package app.astrosoft.consts;
import static app.astrosoft.consts.AstroConsts.*;
import app.astrosoft.beans.Interval;
import app.astrosoft.ui.util.CallBack;
import app.astrosoft.util.Internalization;
import app.astrosoft.util.Mod;
public enum Rasi {
Mesha("Ari", Planet.Mars),
Vrishabha("Tau", Planet.Venus),
Mithuna("Gem", Planet.Mercury),
Kataka("Can", Planet.Moon),
Simha("Leo", Planet.Sun),
Kanya("Vir", Planet.Mercury),
Thula("Lib", Planet.Venus),
Vrichika("Sco", Planet.Mars),
Dhanus("Sag", Planet.Jupiter),
Makara("Cap", Planet.Saturn),
Kumbha("Aqu", Planet.Saturn),
Meena("Pis", Planet.Jupiter);
private String sym;
private Planet owner;
private static Rasi []vals = values();
//private static DisplayFormat displayFormat = DisplayFormat.FULL_NAME;
Rasi(String sym, Planet owner){
this.sym = sym;
this.owner = owner;
}
public static Rasi ofIndex(int index){
return vals[index % vals.length];
}
public static Rasi ofDeg(double deg){
return ofIndex((int)(deg / rasiLength));
}
public String sym(){
return sym;
}
public static Interval longitudeForRasi(Rasi rasi){
double rasiStart = rasi.ordinal() * rasiLength;
double rasiEnd = rasiStart + rasiLength;
Interval rasiInt = new Interval (rasiStart, rasiEnd);
return rasiInt;
}
/** Returns rasi of absolute pos from current rasi
*
* @param pos
* @return
*/
public Rasi absolute(int pos){
return Rasi.ofIndex(this.ordinal() + pos);
}
public Rasi next(){
return absolute(1);
}
public Rasi previous(){
return absolute(-1);
}
public Rasi[] trines(){
return new Rasi[]{
this,
absolute(4),
absolute(8)
};
}
public Planet owner(){
return owner;
}
public int bhava(Rasi ascendant){
Mod m = new Mod(12);
return (m.sub(this.ordinal(), ascendant.ordinal()) + 1);
}
public boolean isOddSign(){
//Ordinal starts with 0
return ( (ordinal() % 2) == 0);
}
public boolean isEvenSign(){
return !isOddSign();
}
public boolean isMovableSign(){
return (this == Mesha || this == Kataka || this == Thula || this == Makara);
}
public boolean isFixedSign(){
return (this == Vrishabha || this == Simha || this == Vrichika || this == Kumbha);
}
/*public static void setDisplayFormat(DisplayFormat formatter){
DisplayFormat.validateNameFormat(formatter);
displayFormat = formatter;
}*/
public String toString(){
return Internalization.getString(this.name());
}
public String toString(Language lang){
return Internalization.getString(lang, this.name());
}
public String toString(DisplayFormat format){
return Internalization.getString(format, this.name(), this.sym());
}
/*public static String[] values(Language language){
final Rasi vals[] = Rasi.values();
final String result[] = new String[vals.length];
Internalization.useLanguage(language, new CallBack(){
public void call() {
int i = 0;
for(Rasi r : vals){
result[i++] = r.toString();
}
}
});
return result;
}*/
}