add HolidayManager

This commit is contained in:
hlq07 2018-05-12 01:18:45 +08:00
parent 2052812189
commit ef8fff6cf4
2 changed files with 145 additions and 0 deletions

View File

@ -0,0 +1,96 @@
package org.cutem.cutecalendar.model;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.cutem.cutecalendar.util.CalendarUtil;
import org.jetbrains.annotations.NotNull;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Calendar;
public class HolidayManager {
private static final String HOLIDAY_FILE = "res/holiday.json";
private static HolidayManager ourInstance;
private JsonArray mHoliday;
private JsonArray mWorkday;
private ClassLoader mClassLoader = getClass().getClassLoader();
private HolidayManager() {
loadHoliday();
}
public static HolidayManager getInstance() {
if (ourInstance == null) {
ourInstance = new HolidayManager();
}
return ourInstance;
}
private void loadHoliday() {
try (
InputStream in = new BufferedInputStream(mClassLoader.getResourceAsStream(HOLIDAY_FILE))
) {
InputStreamReader reader = new InputStreamReader(in);
JsonObject o = new JsonParser().parse(reader).getAsJsonObject();
mHoliday = o.get("holiday").getAsJsonArray();
mWorkday = o.get("workday").getAsJsonArray();
} catch (IOException ex) {
mHoliday = new JsonArray();
mWorkday = new JsonArray();
}
}
public String getFestivalName(@NotNull Calendar date) {
for (JsonElement e : mHoliday) {
JsonObject o = e.getAsJsonObject();
String time = o.get("holiday_time").getAsString();
Calendar c = CalendarUtil.constructCalendar(time, "0:0");
if (c != null && CalendarUtil.isSameDay(c, date)) {
return o.get("name").getAsString();
}
}
return null;
}
public boolean isInHoliday(@NotNull Calendar date) {
for (JsonElement e : mHoliday) {
String bgn = e.getAsJsonObject().get("start_time").getAsString();
String end = e.getAsJsonObject().get("end_time").getAsString();
Calendar c1 = CalendarUtil.constructCalendar(bgn, "0:0");
Calendar c2 = CalendarUtil.constructCalendar(end, "23:59");
if (!date.before(c1) && !date.after(c2)) {
return true;
}
}
return false;
}
public boolean isWorkday(@NotNull Calendar date) {
for (JsonElement e : mWorkday) {
String time = e.getAsString();
Calendar c = CalendarUtil.constructCalendar(time, "0:0");
if (c != null && CalendarUtil.isSameDay(c, date)) {
return true;
}
}
return false;
}
}

View File

@ -0,0 +1,49 @@
package org.cutem.cutecalendar.model;
import org.cutem.cutecalendar.util.CalendarUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.Calendar;
import static org.junit.Assert.*;
public class HolidayManagerTest {
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void getFestivalName() {
HolidayManager manager = HolidayManager.getInstance();
String nameExpected = "yuandan";
String ans = manager.getFestivalName(CalendarUtil.constructCalendar("2018-1-1", "0:0"));
System.out.println(ans);
assertEquals(ans, nameExpected);
assertNull(manager.getFestivalName(CalendarUtil.constructCalendar("2018-2-1", "0:0")));
}
@Test
public void isInHoliday() {
HolidayManager manager = HolidayManager.getInstance();
Calendar date = CalendarUtil.constructCalendar("2018-1-1", "0:0");
assertTrue(manager.isInHoliday(date));
date = CalendarUtil.constructCalendar("2018-1-2", "0:0");
assertFalse(manager.isInHoliday(date));
}
@Test
public void isWorkday() {
HolidayManager manager = HolidayManager.getInstance();
Calendar date = CalendarUtil.constructCalendar("2018-2-11", "0:0");
assertTrue(manager.isWorkday(date));
date = CalendarUtil.constructCalendar("2018-2-12", "0:0");
assertFalse(manager.isWorkday(date));
}
}