/**
* PlanetChart.java
* Created On 2007, Oct 16, 2007 1:57:28 PM
* @author E. Rajasekar
*/
package app.astrosoft.xps.beans;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import app.astrosoft.beans.PlanetChartData;
import app.astrosoft.beans.PlanetaryInfo;
import app.astrosoft.consts.Planet;
import app.astrosoft.consts.Rasi;
import app.astrosoft.consts.Varga;
import app.astrosoft.util.AstroUtil;
import static app.astrosoft.util.CollectionUtil.*;
import app.astrosoft.util.Mod;
public class PlanetChart {
private static final Logger log = Logger.getLogger(PlanetChart.class.getName());
private String varga;
//private List<PlanetLocation> planetLocations;
private Map<Planet, Integer> planetLocations;
private Map<Planet, Rasi> planetHouses;
private Map<Rasi,Set<Planet>> planetsInHouse;
private Mod mod12 = new Mod(12);
public PlanetChart(Varga varga, PlanetaryInfo planetaryInfo){
/*this.varga = varga;
this.planetLocations = planetaryInfo.getPlanetLocation(varga);
this.planetHouses = planetaryInfo.getPlanetRasi(varga);
*/
this(varga, planetaryInfo.getPlanetLocation(varga), planetaryInfo.getPlanetRasi(varga));
}
public PlanetChart(Varga varga, Map<Planet, Integer> planetLocations, Map<Planet, Rasi> planetHouses){
this.varga = varga.name();
this.planetLocations = planetLocations;
this.planetHouses =planetHouses;
this.planetsInHouse = AstroUtil.calcPlanetInHouses(planetHouses);
}
public PlanetChart(Varga varga, Map<Planet, Rasi> planetHouses ){
this(varga, AstroUtil.calcPlanetLocation(planetHouses), planetHouses);
}
/*private void addPlanetLocations(EnumMap<Planet, Integer> planetPos) {
for (Planet p : planetPos.keySet()){
planetLocations.add(new PlanetLocation(p,planetPos.get(p)));
}
}*/
public Map<Planet, Integer> getPlanetLocations() {
return planetLocations;
}
public int getPlanetLocation(Planet planet){
return planetLocations.get(planet);
}
public Rasi getPlanetHouse(Planet planet) {
return planetHouses.get(planet);
}
public String getVarga() {
return varga;
}
public boolean isPlanetAt(Planet planet, int location){
return (getPlanetLocation(planet) == location);
}
public boolean isPlanetsAt(Set<Planet> planets, int location){
for(Planet p : planets){
if (!isPlanetAt(p,location)){
return false;
}
}
return true;
}
public boolean isPlanetAt(Planet planet, Rasi rasi){
return (getPlanetHouse(planet).equals(rasi));
}
public boolean isPlanetsAt(Set<Planet> planets, Rasi rasi){
for(Planet p : planets){
if (!isPlanetAt(p,rasi)){
return false;
}
}
return true;
}
public boolean isPlanetWith(Planet planet1, Planet planet2){
return (getPlanetHouse(planet1).equals(getPlanetHouse(planet2)));
}
public boolean isPlanetWithAll(Planet planet, Set<Planet> planets){
for(Planet p : planets){
if (!isPlanetWith(planet,p)){
return false;
}
}
return true;
}
public boolean isPlanetWithAny(Planet planet, Set<Planet> planets){
for(Planet p : planets){
if (isPlanetWith(planet,p)){
return true;
}
}
return false;
}
public boolean isPlanetInOwnHouse(Planet planet){
return planet.isOwnerOf(getPlanetHouse(planet));
}
public boolean isPlanetExalted(Planet planet){
return planet.isExaltedRasi(getPlanetHouse(planet));
}
public boolean isPlanetDebilitated(Planet planet){
return planet.isDebilitatedRasi(getPlanetHouse(planet));
}
public boolean isPlanetInMoolaTrikona(Planet planet){
return planet.isMoolaTrikona(getPlanetHouse(planet));
}
public boolean isPlanetInOwnOrExaltedHouse(Planet planet){
return (isPlanetInOwnHouse(planet) ||isPlanetExalted(planet) );
}
public boolean isPlanetInKendra(Planet planet){
//System.out.println(getPlanetLocation(planet) + " = " + isKendraLocation(getPlanetLocation(planet)));
return isKendraLocation(getPlanetLocation(planet));
}
public boolean isPlanetInTrine(Planet planet){
//System.out.println(getPlanetLocation(planet) + " = " + isTrineLocation(getPlanetLocation(planet)));
return isTrineLocation(getPlanetLocation(planet));
}
public boolean isPlanetInKendraTo(Planet planet1, Planet planet2){
int distance = mod12.sub(getPlanetLocation(planet1) , getPlanetLocation(planet2)) + 1;
return isKendraLocation(distance);
}
public boolean isPlanetInTrineTo(Planet planet1, Planet planet2){
int distance = mod12.sub(getPlanetLocation(planet1) , getPlanetLocation(planet2)) + 1;
return isTrineLocation(distance);
}
public boolean isPlanetInKendraOrTrine(Planet planet){
return (isPlanetInKendra(planet) || isPlanetInTrine(planet));
}
public boolean isPlanetInKendraOrTrineTo(Planet planet1, Planet planet2){
return (isPlanetInKendraTo(planet1,planet2) || isPlanetInTrineTo(planet1,planet2));
}
public boolean isPlanetAspectedBy(Planet aspected, Planet aspecting){
int distance = mod12.sub(getPlanetLocation(aspected) , getPlanetLocation(aspecting)) + 1;
return aspecting.isAspectingLocation(distance);
}
public boolean isHouseAspectedBy(Rasi aspected, Planet aspecting){
int distance = mod12.sub(aspected.ordinal() , getPlanetHouse(aspecting).ordinal()) + 1;
return aspecting.isAspectingLocation(distance);
}
public Set<Planet> planetsAt(Planet from, int location){
Rasi fromHouse = getPlanetHouse(from);
Rasi atHouse = fromHouse.absolute(location - 1);
log.fine("From house " + fromHouse);
log.fine("To house " + atHouse);
return planetsInHouse.get(atHouse);
}
/** Location : 1 - 12 **/
public Planet lordOf(int location){
Rasi asc = getPlanetHouse(Planet.Ascendant);
return asc.absolute(location - 1).owner();
}
public Planet lordOf(String location){
return lordOf(Integer.parseInt(location));
}
/** Location : 1 - 12 **/
public Rasi houseOf(int location){
Rasi asc = getPlanetHouse(Planet.Ascendant);
return asc.absolute(location - 1);
}
public Rasi houseOf(String location){
return houseOf(Integer.parseInt(location));
}
public boolean isPlanetStronglyDisposed(Planet planet){
return ( isPlanetExalted(planet) ||
isPlanetInOwnHouse(planet) ||
(isPlanetInKendraOrTrine(planet) && !isPlanetDebilitated(planet)));
}
public static boolean isKendraLocation(int location){
return (location == 1 || location == 4 || location == 7 || location == 10);
}
public static boolean isTrineLocation(int location){
return (location == 1 || location == 5 || location == 9);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(varga);
sb.append(" => ");
sb.append(planetLocations);
sb.append(" => ");
sb.append(planetHouses);
return sb.toString();
}
public static void main(String[] args) {
Map.Entry<Planet, Rasi> entry1 = newEntry(Planet.Sun, Rasi.Mesha);
Map.Entry<Planet, Rasi> entry2 = newEntry(Planet.Moon, Rasi.Vrichika);
Map.Entry<Planet, Rasi> entry3 = newEntry(Planet.Ascendant, Rasi.Kataka);
Map<Planet,Rasi> planetHouses = newEnumMap(Planet.class,newEntry(Planet.Sun, Rasi.Mesha),newEntry(Planet.Ascendant, Rasi.Kanya));
PlanetChart pc = new PlanetChart(Varga.Rasi, planetHouses);
System.out.println(pc);
/**Map.Entry<Planet, Rasi> entries[] = { CollectionUtil.newEntry(Planet.Sun, Rasi.Mesha),
CollectionUtil.newEntry(Planet.Moon, Rasi.Vrichika),
CollectionUtil.newEntry(Planet.Ascendant, Rasi.kataka)
};*/
}
}