package mil.nga.giat.asam.model; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Comparator; import java.util.Date; import java.util.Locale; @SuppressWarnings("serial") public class AsamBean implements Serializable, Comparable<AsamBean> { public static final SimpleDateFormat OCCURRENCE_DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy", Locale.US); private Integer mId; private Double mLatitude; private Double mLongitude; private Date mOccurrenceDate; private String mReferenceNumber; private String mGeographicalSubregion; private String mAggressor; private String mVictim; private String mDescription; private String mLatitudeDegMinSec; private String mLongitudeDegMinSec; public Integer getId() { return mId; } public void setId(Integer id) { this.mId = id; } public Double getLatitude() { if (mLatitude == null) { return 0.0; } else if (mLatitude < -90.0) { mLatitude = -90.0; } else if (mLatitude > 90.0) { mLatitude = 90.0; } return mLatitude; } public void setLatitude(Double latitude) { this.mLatitude = latitude; } public Double getLongitude() { if (mLongitude == null) { return 0.0; } else if (mLongitude < -180.0) { mLongitude = -180.0; } else if (mLongitude > 180.0) { mLongitude = 180.0; } return mLongitude; } public void setLongitude(Double longitude) { this.mLongitude = longitude; } public Date getOccurrenceDate() { return mOccurrenceDate; } public void setOccurrenceDate(Date occurrenceDate) { this.mOccurrenceDate = occurrenceDate; } public String getReferenceNumber() { return mReferenceNumber; } public void setReferenceNumber(String referenceNumber) { this.mReferenceNumber = referenceNumber; } public String getGeographicalSubregion() { return mGeographicalSubregion; } public void setGeographicalSubregion(String geographicalSubregion) { this.mGeographicalSubregion = geographicalSubregion; } public String getAggressor() { return mAggressor; } public void setAggressor(String aggressor) { this.mAggressor = aggressor; } public String getVictim() { return mVictim; } public void setVictim(String victim) { this.mVictim = victim; } public String getDescription() { return mDescription; } public void setDescription(String description) { this.mDescription = description; } public String formatLatitutdeDegMinSec() { if (mLatitudeDegMinSec == null && mLatitude != null) { String hemisphere = "N"; double degrees = mLatitude.doubleValue(); if (degrees < 0) { hemisphere = "S"; degrees = Math.abs(degrees); } double minutes = (degrees - (int)degrees) * 60.0; long seconds = Math.round((minutes - (int)minutes) * 60.0); if (seconds >= 60) { seconds = 0; minutes++; } if (minutes >= 60) { minutes = 0; degrees++; } mLatitudeDegMinSec = String.format("%02d\u00b0 %02d' %02d\" %s", (int)degrees, (int)minutes, seconds, hemisphere); } return mLatitudeDegMinSec == null ? "" : mLatitudeDegMinSec; } public String formatLongitudeDegMinSec() { if (mLongitudeDegMinSec == null && mLongitude != null) { String hemisphere = "E"; double degrees = mLongitude.doubleValue(); if (degrees < 0) { hemisphere = "W"; degrees = Math.abs(degrees); } double minutes = (degrees - (int)degrees) * 60.0; long seconds = Math.round((minutes - (int)minutes) * 60.0); if (seconds >= 60) { seconds = 0; minutes++; } if (minutes >= 60) { minutes = 0; degrees++; } mLongitudeDegMinSec = String.format("%03d\u00b0 %02d' %02d\" %s", (int)degrees, (int)minutes, seconds, hemisphere); } return mLongitudeDegMinSec == null ? "" : mLongitudeDegMinSec; } @Override public String toString() { return "Victim: " + mVictim + ", Lat: " + mLatitude + ", Lon: " + mLongitude + ", Date: " + mOccurrenceDate; } @Override public int compareTo(AsamBean another) { if (mOccurrenceDate == null) { return -1; } if (another != null && another.mOccurrenceDate != null) { return -mOccurrenceDate.compareTo(another.mOccurrenceDate); } return 1; } public static class AscendingOccurrenceDateComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mOccurrenceDate == null) { return -1; } return asam1.mOccurrenceDate.compareTo(asam2.mOccurrenceDate); } } public static class DescendingOccurrenceDateComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mOccurrenceDate == null) { return 1; } return -asam1.mOccurrenceDate.compareTo(asam2.mOccurrenceDate); } } public static class AscendingReferenceNumberComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mReferenceNumber == null) { return -1; } return asam1.mReferenceNumber.toUpperCase(Locale.US).compareTo(asam2.mReferenceNumber == null ? null : asam2.mReferenceNumber.toUpperCase(Locale.US)); } } public static class DescendingReferenceNumberComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mReferenceNumber == null) { return 1; } return -asam1.mReferenceNumber.toUpperCase(Locale.US).compareTo(asam2.mReferenceNumber == null ? null : asam2.mReferenceNumber.toUpperCase(Locale.US)); } } public static class AscendingVictimComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mVictim == null) { return -1; } return asam1.mVictim.toUpperCase(Locale.US).compareTo(asam2.mVictim == null ? null : asam2.mVictim.toUpperCase(Locale.US)); } } public static class DescendingVictimComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mVictim == null) { return 1; } return -asam1.mVictim.toUpperCase(Locale.US).compareTo(asam2.mVictim == null ? null : asam2.mVictim.toUpperCase(Locale.US)); } } public static class AscendingSubregionComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mGeographicalSubregion == null) { return -1; } return asam1.mGeographicalSubregion.compareTo(asam2.mGeographicalSubregion); } } public static class DescendingSubregionComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mGeographicalSubregion == null) { return 1; } return -asam1.mGeographicalSubregion.compareTo(asam2.mGeographicalSubregion); } } public static class AscendingAggressorComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mAggressor == null) { return -1; } return asam1.mAggressor.toUpperCase(Locale.US).compareTo(asam2.mAggressor == null ? null : asam2.mAggressor.toUpperCase(Locale.US)); } } public static class DescendingAggressorComparator implements Comparator<AsamBean> { @Override public int compare(AsamBean asam1, AsamBean asam2) { if (asam1.mAggressor == null) { return 1; } return -asam1.mAggressor.toUpperCase(Locale.US).compareTo(asam2.mAggressor == null ? null : asam2.mAggressor.toUpperCase(Locale.US)); } } }