package moontime.droid.util;
import java.text.DateFormatSymbols;
import java.util.Arrays;
import java.util.Calendar;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.primitives.Ints;
public class Util {
public static final ImmutableList<String> MONTH_SHORT_NAMES = ImmutableList.copyOf(Lists.partition(
Arrays.asList(new DateFormatSymbols().getShortMonths()), 12).get(0));
public static final ImmutableSet<Integer> CALENDAR_FIELDS = ImmutableSet.of(Calendar.YEAR, Calendar.MONTH,
Calendar.DATE, Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND);
public static int getMonth(String shortName) {
for (int i = 0; i < MONTH_SHORT_NAMES.size(); i++) {
if (MONTH_SHORT_NAMES.get(i).equals(shortName)) {
return i;
}
}
throw new IllegalStateException("month '" + shortName + "' not found in " + MONTH_SHORT_NAMES);
}
public static long hoursToMillis(int hours) {
return hours * 1000 * 60 * 60;
}
public static void resetFields(Calendar calendar, int... fieldsToReset) {
for (int field : fieldsToReset) {
resetCalendarField(calendar, field);
}
}
public static void resetFieldsExcept(Calendar calendar, int... fieldsToKeep) {
for (int field : Sets.difference(CALENDAR_FIELDS, ImmutableSet.of(Ints.asList(fieldsToKeep)))) {
resetCalendarField(calendar, field);
}
}
private static void resetCalendarField(Calendar calendar, int field) {
if (field == Calendar.DATE || field == Calendar.DAY_OF_MONTH) {
calendar.set(field, 1);
} else {
calendar.set(field, 0);
}
}
public static boolean equalsInFields(Calendar calendar1, Calendar calendar2, int... fields) {
for (int field : fields) {
if (calendar1.get(field) != calendar2.get(field)) {
return false;
}
}
return true;
}
public static void copyFields(Calendar calendarFrom, Calendar calendarTo, int... fields) {
for (int field : fields) {
calendarTo.set(field, calendarFrom.get(field));
}
}
public static String wrap(String string, String tag) {
return String.format("<%2$s>%0$s</%2$s>", string, tag);
}
}