/** * Interval.java * Created On 2005, Oct 15, 2005 3:23:14 PM * @author relango * */ package app.astrosoft.beans; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.text.DateFormat; import app.astrosoft.consts.DisplayFormat; import app.astrosoft.ui.AstroSoft; import app.astrosoft.util.AstroUtil; import swisseph.SweDate; public class Interval implements Comparable { private static DateFormat dateFormater = new SimpleDateFormat( "EEE dd MMM yyyy "); private static DateFormat dateTimeFormatter = new SimpleDateFormat( "dd MMM HH:mm:ss z"); static { //dateTimeFormatter.setTimeZone(AstroSoft.getPreferences().getPlace().astrosoftTimeZone().getTimeZone()); } private double start; private double end; private Interval tLongitude; public Interval(double start, double end) throws IllegalArgumentException { if (start > end) { // throw new IllegalArgumentException("Start is greater than End" + // SweDate.getDate(start) + "-" + SweDate.getDate(end) ); throw new IllegalArgumentException("Start is greater than End"); } this.start = start; this.end = end; //System.out.println(this); } /** * @return Returns the start. */ public double getStart() { return start; } /** * @return Returns the end. */ public double getEnd() { return end; } public static Interval intersection(Interval i1, Interval i2) { double start = Math.max(i1.start, i2.start); double end = Math.min(i1.end, i2.end); if (end > start){ //System.out.println("< " + i1.start + "," + i1.end + " > < " + i2.start + "," + i2.end + " > "); //System.out.println(start + "<>" + end); return new Interval(start,end); } return null; } public static List<Interval> intersection(List<Interval> l1, List<Interval> l2) { List<Interval> result = new ArrayList<Interval>(); for (Interval i1 : l1) { for (Interval i2 : l2) { Interval x = intersection(i1, i2); if (x != null) result.add(x); } } return result; } public static List<Interval> common(List<Interval> l1, List<Interval> l2) { List<Interval> result = new ArrayList<Interval>(); for (Interval i1 : l1) { for (Interval i2 : l2) { if(i1.equals(i2)){ result.add(i1); } } } return result; } @Override public String toString() { return toString(DisplayFormat.DEG);// + " <--> " + toString(DisplayFormat.DATE_TIME); } public String toString(DisplayFormat format) { if (!DisplayFormat.intervalFormats().contains(format)){ throw new IllegalArgumentException("Invalid Interval Display Format"); } String str = ""; switch (format) { case DEG: str = AstroUtil.dms(start) + " - " + AstroUtil.dms(end); break; case DATE: str = dateFormater.format(SweDate.getDate(start)) + " - " + dateFormater.format(SweDate.getDate(end)); break; case DATE_TIME: str = dateTimeFormatter.format(SweDate.getDate(start)) + " - " + dateTimeFormatter.format(SweDate.getDate(end)); break; } return str; } public static Calendar parseDate(String dateStr, DisplayFormat format) throws ParseException { Calendar cal = new GregorianCalendar(); switch (format) { case DATE: cal.setTime(dateFormater.parse(dateStr)); return cal; case DATE_TIME: cal.setTime(dateTimeFormatter.parse(dateStr)); return cal; default: throw new IllegalArgumentException("Invalid formatter " + format); } } @Override public boolean equals(Object o) { Interval i = (Interval) o; return (this.start == i.start && this.end == i.end); } public int compareTo(Object o) { Interval i = (Interval) o; if (this.start < i.start) { return -1; } else if (this.start > i.start) { return 1; } return 0; } }