package pl.edu.icm.saos.webapp.analysis;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.closeTo;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;
import static pl.edu.icm.saos.common.testcommon.IntToLongMatcher.equalsLong;
import static pl.edu.icm.saos.search.config.model.JudgmentIndexField.CC_DISTRICT_AREA;
import static pl.edu.icm.saos.search.config.model.JudgmentIndexField.CC_DISTRICT_COURT_ID;
import static pl.edu.icm.saos.search.config.model.JudgmentIndexField.CC_REGIONAL_COURT_ID;
import static pl.edu.icm.saos.search.config.model.JudgmentIndexField.CC_REGION_AREA;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrInputDocument;
import org.joda.time.LocalDate;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.MediaType;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.web.context.WebApplicationContext;
import com.google.common.collect.Lists;
import pl.edu.icm.saos.common.chart.value.DayPeriod;
import pl.edu.icm.saos.common.chart.value.MonthPeriod;
import pl.edu.icm.saos.common.chart.value.SimpleLocalDate;
import pl.edu.icm.saos.common.chart.value.YearPeriod;
import pl.edu.icm.saos.common.testcommon.category.SlowTest;
import pl.edu.icm.saos.persistence.model.CommonCourt;
import pl.edu.icm.saos.persistence.model.CommonCourt.CommonCourtType;
import pl.edu.icm.saos.persistence.model.CommonCourtDivision;
import pl.edu.icm.saos.persistence.model.SupremeCourtChamber;
import pl.edu.icm.saos.persistence.model.SupremeCourtChamberDivision;
import pl.edu.icm.saos.persistence.repository.CcDivisionRepository;
import pl.edu.icm.saos.persistence.repository.CommonCourtRepository;
import pl.edu.icm.saos.persistence.repository.ScChamberDivisionRepository;
import pl.edu.icm.saos.persistence.repository.ScChamberRepository;
import pl.edu.icm.saos.search.config.model.JudgmentIndexField;
import pl.edu.icm.saos.search.util.CcCourtAreaFieldValueCreator;
import pl.edu.icm.saos.webapp.WebappTestSupport;
import pl.edu.icm.saos.webapp.analysis.request.JudgmentSeriesFilter;
import pl.edu.icm.saos.webapp.analysis.request.MonthYearRange;
import pl.edu.icm.saos.webapp.analysis.request.UiySettings.UiyValueType;
import pl.edu.icm.saos.webapp.court.SimpleCommonCourt;
import pl.edu.icm.saos.webapp.court.SimpleEntity;
/**
* @author madryk
*/
@Category(SlowTest.class)
@WebAppConfiguration
public class AnalysisControllerTest extends WebappTestSupport {
@Autowired
@Qualifier("solrJudgmentsServer")
private SolrServer judgmentsServer;
@Autowired
private CommonCourtRepository commonCourtRepository;
@Autowired
private CcDivisionRepository commonCourtDivisionRepository;
@Autowired
private ScChamberRepository scChamberRepository;
@Autowired
private ScChamberDivisionRepository scChamberDivisionRepository;
@Autowired
private CcCourtAreaFieldValueCreator ccCourtAreaFieldValueCreator;
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationCtx;
private static final String URL_BASE = "/analysis";
// --- common courts ---
private CommonCourt appealCourt1;
private CommonCourt regionalCourt1_1;
private CommonCourt districtCourt1_1_1;
private CommonCourt districtCourt1_1_2;
private CommonCourt regionalCourt1_2;
private CommonCourt appealCourt2;
private CommonCourt regionalCourt2_1;
// --- common court divisions ---
private CommonCourtDivision appealCourt1_division_1;
private CommonCourtDivision appealCourt1_division_2;
private CommonCourtDivision appealCourt1_division_3;
// --- supreme court chambers ---
private SupremeCourtChamber scChamber_1;
private SupremeCourtChamber scChamber_2;
// --- supreme court chamber divisions ---
private SupremeCourtChamberDivision scChamber_1_division_1;
private SupremeCourtChamberDivision scChamber_1_division_2;
private SupremeCourtChamberDivision scChamber_2_division_1;
@Before
public void setUp() throws Exception {
judgmentsServer.deleteByQuery("*:*");
judgmentsServer.commit();
generateCommonCourts();
generateSupremeCourtChambers();
indexJudgments();
mockMvc = webAppContextSetup(webApplicationCtx)
.build();
}
@After
public void cleanup() throws SolrServerException, IOException {
judgmentsServer.deleteByQuery("*:*");
judgmentsServer.commit();
}
//------------------------ TESTS --------------------------
@Test
public void showAnalysis_initial() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE));
// assert
MonthYearRange expectedMonthYearRange = new MonthYearRange();
expectedMonthYearRange.setStartMonth(1);
expectedMonthYearRange.setStartYear((new LocalDate()).getYear() - 20);
expectedMonthYearRange.setEndMonth((new LocalDate()).getMonthOfYear());
expectedMonthYearRange.setEndYear((new LocalDate()).getYear());
result
.andExpect(status().isOk())
.andExpect(view().name("analysis"))
.andExpect(model().attribute("analysisForm",
allOf(
hasProperty("seriesFilters", contains(createJudgmentSeriesFilter(null))),
hasProperty("ysettings", hasProperty("valueType", is(UiyValueType.NUMBER))),
hasProperty("globalFilter", hasProperty("judgmentDateRange", is(expectedMonthYearRange)))
)
));
}
@Test
public void showAnalysis_checkExposeParams() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE)
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "1991")
.param("globalFilter.judgmentDateRange.endMonth", "5")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("ysettings.valueType", "PERCENT"));
// assert
MonthYearRange expectedMonthYearRange = new MonthYearRange();
expectedMonthYearRange.setStartMonth(1);
expectedMonthYearRange.setStartYear(1991);
expectedMonthYearRange.setEndMonth(5);
expectedMonthYearRange.setEndYear(2001);
result
.andExpect(status().isOk())
.andExpect(view().name("analysis"))
.andExpect(model().attribute("analysisForm",
allOf(
hasProperty("seriesFilters", contains(createJudgmentSeriesFilter("phrase1"), createJudgmentSeriesFilter("phrase2"))),
hasProperty("ysettings", hasProperty("valueType", is(UiyValueType.PERCENT))),
hasProperty("globalFilter", hasProperty("judgmentDateRange", is(expectedMonthYearRange)))
)
));
}
@Test
public void showAnalysis_checkCommonCourtsInModel() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE)
.param("globalFilter.courtCriteria.courtType", "COMMON"));
// assert
result
.andExpect(status().isOk())
.andExpect(view().name("analysis"))
.andExpect(model().attribute("commonCourts", containsInAnyOrder(
createSimpleCommonCourt(appealCourt1),
createSimpleCommonCourt(regionalCourt1_1),
createSimpleCommonCourt(districtCourt1_1_1),
createSimpleCommonCourt(districtCourt1_1_2),
createSimpleCommonCourt(regionalCourt1_2),
createSimpleCommonCourt(appealCourt2),
createSimpleCommonCourt(regionalCourt2_1)
)
));
}
@Test
public void showAnalysis_checkCommonCourtDivisionsInModel() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE)
.param("globalFilter.courtCriteria.courtType", "COMMON")
.param("globalFilter.courtCriteria.ccCourtId", String.valueOf(appealCourt1.getId())));
// assert
result
.andExpect(status().isOk())
.andExpect(view().name("analysis"))
.andExpect(model().attribute("commonCourtDivisions", containsInAnyOrder(
createSimpleEntity(appealCourt1_division_1),
createSimpleEntity(appealCourt1_division_2),
createSimpleEntity(appealCourt1_division_3)
)
));
}
@Test
public void showAnalysis_checkSupremeCourtChambersInModel() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE)
.param("globalFilter.courtCriteria.courtType", "SUPREME"));
// assert
result
.andExpect(status().isOk())
.andExpect(view().name("analysis"))
.andExpect(model().attribute("supremeChambers", containsInAnyOrder(
createSimpleEntity(scChamber_1),
createSimpleEntity(scChamber_2)
)
));
}
@Test
public void showAnalysis_checkSupremeCourtChamberDivisionsInModel() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE)
.param("globalFilter.courtCriteria.courtType", "SUPREME")
.param("globalFilter.courtCriteria.scCourtChamberId", String.valueOf(scChamber_1.getId())));
// assert
result
.andExpect(status().isOk())
.andExpect(view().name("analysis"))
.andExpect(model().attribute("supremeChamberDivisions", containsInAnyOrder(
createSimpleEntity(scChamber_1_division_1),
createSimpleEntity(scChamber_1_division_2)
)
));
}
@Test
public void removeSeriesSearchCriteria() throws Exception {
// execute
ResultActions result = mockMvc.perform(post(URL_BASE + "/removePhrase")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("seriesFilters[2].phrase", "phrase3")
.param("filterIndexToRemove", "1"));
// assert
result
.andExpect(status().isOk())
.andExpect(view().name("analysisForm"))
.andExpect(model().attribute("analysisForm",
hasProperty("seriesFilters", contains(
createJudgmentSeriesFilter("phrase1"),
createJudgmentSeriesFilter("phrase3"))
)
));
}
@Test
public void addNewSeriesSearchCriteria() throws Exception {
// execute
ResultActions result = mockMvc.perform(post(URL_BASE + "/addNewPhrase")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2"));
// assert
result
.andExpect(status().isOk())
.andExpect(view().name("analysisForm"))
.andExpect(model().attribute("analysisForm",
hasProperty("seriesFilters", contains(
createJudgmentSeriesFilter("phrase1"),
createJudgmentSeriesFilter("phrase2"),
createJudgmentSeriesFilter(null))
)
));
}
@Test
public void generate_WithOneYearPeriods() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "1991")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 2, 0, 0, 0, 0, 1, 0, 0, 2, 21, 0);
assertMainChartSeries(1, result, 0, 1, 0, 0, 1, 1, 1, 1, 1, 21, 0);
assertMainChartYearPeriodXticks(result,
new YearPeriod(1991, 1991),
new YearPeriod(1992, 1992),
new YearPeriod(1993, 1993),
new YearPeriod(1994, 1994),
new YearPeriod(1995, 1995),
new YearPeriod(1996, 1996),
new YearPeriod(1997, 1997),
new YearPeriod(1998, 1998),
new YearPeriod(1999, 1999),
new YearPeriod(2000, 2000),
new YearPeriod(2001, 2001));
assertAggregatedChartSeries(0, result, 1, 26);
assertAggregatedChartSeries(1, result, 3, 27);
}
@Test
public void generate_WithSixMonthsPeriods() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "1996")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 1, 0, 0, 0, 0, 0, 2, 0, 18, 3, 0);
assertMainChartSeries(1, result, 1, 0, 0, 1, 0, 1, 0, 1, 17, 4, 0);
assertMainChartMonthPeriodXticks(result,
new MonthPeriod(1996, 1, 1996, 6),
new MonthPeriod(1996, 7, 1996, 12),
new MonthPeriod(1997, 1, 1997, 6),
new MonthPeriod(1997, 7, 1997, 12),
new MonthPeriod(1998, 1, 1998, 6),
new MonthPeriod(1998, 7, 1998, 12),
new MonthPeriod(1999, 1, 1999, 6),
new MonthPeriod(1999, 7, 1999, 12),
new MonthPeriod(2000, 1, 2000, 6),
new MonthPeriod(2000, 7, 2000, 12),
new MonthPeriod(2001, 1, 2001, 6));
assertAggregatedChartSeries(0, result, 1, 24);
assertAggregatedChartSeries(1, result, 3, 25);
}
@Test
public void generate_WithOneMonthPeriods() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 4, 4, 0, 9, 1, 0, 0, 0, 1, 0, 0, 2, 0);
assertMainChartSeries(1, result, 6, 3, 0, 7, 1, 0, 0, 0, 3, 0, 0, 1, 0);
assertMainChartXticksFor2000Year(result);
assertAggregatedChartSeries(0, result, 1, 21);
assertAggregatedChartSeries(1, result, 3, 21);
}
@Test
public void generate_WithOneWeekPeriods() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "3")
.param("globalFilter.judgmentDateRange.endYear", "2000")
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 1, 0, 0, 1, 3, 0, 0, 3, 0, 0, 0, 0, 0);
assertMainChartSeries(1, result, 2, 0, 0, 1, 3, 0, 0, 1, 2, 0, 0, 0, 0);
assertMainChartDayPeriodXticks(result,
new DayPeriod(new SimpleLocalDate(2000, 1, 1), new SimpleLocalDate(2000, 1, 7) ),
new DayPeriod(new SimpleLocalDate(2000, 1, 8), new SimpleLocalDate(2000, 1, 14) ),
new DayPeriod(new SimpleLocalDate(2000, 1, 15), new SimpleLocalDate(2000, 1, 21) ),
new DayPeriod(new SimpleLocalDate(2000, 1, 22), new SimpleLocalDate(2000, 1, 28) ),
new DayPeriod(new SimpleLocalDate(2000, 1, 29), new SimpleLocalDate(2000, 2, 4) ),
new DayPeriod(new SimpleLocalDate(2000, 2, 5), new SimpleLocalDate(2000, 2, 11) ),
new DayPeriod(new SimpleLocalDate(2000, 2, 12), new SimpleLocalDate(2000, 2, 18) ),
new DayPeriod(new SimpleLocalDate(2000, 2, 19), new SimpleLocalDate(2000, 2, 25) ),
new DayPeriod(new SimpleLocalDate(2000, 2, 26), new SimpleLocalDate(2000, 3, 3) ),
new DayPeriod(new SimpleLocalDate(2000, 3, 4), new SimpleLocalDate(2000, 3, 10) ),
new DayPeriod(new SimpleLocalDate(2000, 3, 11), new SimpleLocalDate(2000, 3, 17) ),
new DayPeriod(new SimpleLocalDate(2000, 3, 18), new SimpleLocalDate(2000, 3, 24) ),
new DayPeriod(new SimpleLocalDate(2000, 3, 25), new SimpleLocalDate(2000, 3, 31) ));
assertAggregatedChartSeries(0, result, 1, 8);
assertAggregatedChartSeries(1, result, 3, 9);
}
@Test
public void generate_WithOneDayPeriods() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2000")
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1);
assertMainChartSeries(1, result,
0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1);
List<DayPeriod> oneDayPeriods = Lists.newArrayList();
for (int i=1; i<=31; ++i) {
oneDayPeriods.add(new DayPeriod(new SimpleLocalDate(2000, 1, i), new SimpleLocalDate(2000, 1, i)));
}
assertMainChartDayPeriodXticks(result, oneDayPeriods.toArray(new DayPeriod[31]));
assertAggregatedChartSeries(0, result, 1, 4);
assertAggregatedChartSeries(1, result, 3, 6);
}
@Test
public void generate_WithPercentYValues() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("ysettings.valueType", "PERCENT")
.accept(MediaType.APPLICATION_JSON));
// assert
List<Double> series0Values = Lists.newArrayList(
(double) 4/10 * 100,
(double) 4/7 * 100,
(double) 0,
(double) 9/16 * 100,
(double) 1/1 * 100,
(double) 0,
(double) 0,
(double) 0,
(double) 1/3 * 100,
(double) 0,
(double) 0,
(double) 2/2 * 100,
(double) 0);
List<Double> series1Values = Lists.newArrayList(
(double) 6/10 * 100,
(double) 3/7 * 100,
(double) 0,
(double) 7/16 * 100,
(double) 1/1 * 100,
(double) 0,
(double) 0,
(double) 0,
(double) 3/3 * 100,
(double) 0,
(double) 0,
(double) 1/2 * 100,
(double) 0);
assertMainChartSeriesDouble(0, result, ArrayUtils.toPrimitive(series0Values.toArray(new Double[0])));
assertMainChartSeriesDouble(1, result,ArrayUtils.toPrimitive(series1Values.toArray(new Double[0])));
assertMainChartXticksFor2000Year(result);
double avgSeries0 = series0Values.stream().collect(Collectors.averagingDouble(x -> x));
assertAggregatedChartSeriesDouble(0, result, 1, avgSeries0);
double avgSeries1 = series1Values.stream().collect(Collectors.averagingDouble(x -> x));
assertAggregatedChartSeriesDouble(1, result, 3, avgSeries1);
}
@Test
public void generate_WithNumberPer1000YValues() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("ysettings.valueType", "NUMBER_PER_1000")
.accept(MediaType.APPLICATION_JSON));
// assert
List<Double> series0Values = Lists.newArrayList(
(double) 4 * 1000 / 10,
(double) 4 * 1000 / 7,
(double) 0,
(double) 9 * 1000 / 16,
(double) 1 * 1000 / 1,
(double) 0,
(double) 0,
(double) 0,
(double) 1 * 1000 / 3,
(double) 0,
(double) 0,
(double) 2 * 1000 / 2,
(double) 0);
List<Double> series1Values = Lists.newArrayList(
(double) 6 * 1000 / 10,
(double) 3 * 1000 / 7,
(double) 0,
(double) 7 * 1000 / 16,
(double) 1 * 1000 / 1,
(double) 0,
(double) 0,
(double) 0,
(double) 3 * 1000 / 3,
(double) 0,
(double) 0,
(double) 1 * 1000 / 2,
(double) 0);
assertMainChartSeriesDouble(0, result, ArrayUtils.toPrimitive(series0Values.toArray(new Double[0])));
assertMainChartSeriesDouble(1, result,ArrayUtils.toPrimitive(series1Values.toArray(new Double[0])));
assertMainChartXticksFor2000Year(result);
double avgSeries0 = series0Values.stream().collect(Collectors.averagingDouble(x -> x));
assertAggregatedChartSeriesDouble(0, result, 1, avgSeries0);
double avgSeries1 = series1Values.stream().collect(Collectors.averagingDouble(x -> x));
assertAggregatedChartSeriesDouble(1, result, 3, avgSeries1);
}
@Test
public void generate_ForCommonCourts() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("globalFilter.courtCriteria.courtType", "COMMON")
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartSeries(1, result, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartXticksFor2000Year(result);
assertAggregatedChartSeries(0, result, 1, 10);
assertAggregatedChartSeries(1, result, 3, 9);
assertCcCourtChartSeries(0, result, 8, 2);
assertCcCourtChartSeries(1, result, 8, 1);
assertCcCourtChartXticks(result, appealCourt1, appealCourt2);
}
@Test
public void generate_ForCommonCourt() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("globalFilter.courtCriteria.courtType", "COMMON")
.param("globalFilter.courtCriteria.ccCourtId", String.valueOf(appealCourt1.getId()))
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartSeries(1, result, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartXticksFor2000Year(result);
assertAggregatedChartSeries(0, result, 1, 5);
assertAggregatedChartSeries(1, result, 3, 5);
}
@Test
public void generate_ForCcAppealWithDependent() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("globalFilter.courtCriteria.courtType", "COMMON")
.param("globalFilter.courtCriteria.ccCourtId", String.valueOf(appealCourt1.getId()))
.param("globalFilter.courtCriteria.ccIncludeDependentCourtJudgments", "true")
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartSeries(1, result, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartXticksFor2000Year(result);
assertAggregatedChartSeries(0, result, 1, 8);
assertAggregatedChartSeries(1, result, 3, 8);
assertCcCourtChartXticks(result, appealCourt1, regionalCourt1_2, regionalCourt1_1);
assertCcCourtChartSeries(0, result, 5, 0, 3);
assertCcCourtChartSeries(1, result, 5, 1, 2);
}
@Test
public void generate_ForCcRegionalWithDependent() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("globalFilter.courtCriteria.courtType", "COMMON")
.param("globalFilter.courtCriteria.ccCourtId", String.valueOf(regionalCourt1_1.getId()))
.param("globalFilter.courtCriteria.ccIncludeDependentCourtJudgments", "true")
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartSeries(1, result, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartXticksFor2000Year(result);
assertAggregatedChartSeries(0, result, 1, 3);
assertAggregatedChartSeries(1, result, 3, 2);
assertCcCourtChartXticks(result, regionalCourt1_1, districtCourt1_1_1, districtCourt1_1_2);
assertCcCourtChartSeries(0, result, 1, 2, 0);
assertCcCourtChartSeries(1, result, 1, 0, 1);
}
@Test
public void generate_ForCommonCourtDivision() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("globalFilter.courtCriteria.courtType", "COMMON")
.param("globalFilter.courtCriteria.ccCourtId", String.valueOf(appealCourt1.getId()))
.param("globalFilter.courtCriteria.ccCourtDivisionId", String.valueOf(appealCourt1_division_1.getId()))
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartSeries(1, result, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartXticksFor2000Year(result);
assertAggregatedChartSeries(0, result, 1, 2);
assertAggregatedChartSeries(1, result, 3, 2);
}
@Test
public void generate_ForSupremeCourtChamber() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("globalFilter.courtCriteria.courtType", "SUPREME")
.param("globalFilter.courtCriteria.scCourtChamberId", String.valueOf(scChamber_1.getId()))
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartSeries(1, result, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartXticksFor2000Year(result);
assertAggregatedChartSeries(0, result, 1, 5);
assertAggregatedChartSeries(1, result, 3, 5);
}
@Test
public void generate_ForSupremeCourtChamberDivision() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generate")
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("globalFilter.courtCriteria.courtType", "SUPREME")
.param("globalFilter.courtCriteria.scCourtChamberId", String.valueOf(scChamber_1.getId()))
.param("globalFilter.courtCriteria.scCourtChamberDivisionId", String.valueOf(scChamber_1_division_1.getId()))
.param("ysettings.valueType", "NUMBER")
.accept(MediaType.APPLICATION_JSON));
// assert
assertMainChartSeries(0, result, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartSeries(1, result, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
assertMainChartXticksFor2000Year(result);
assertAggregatedChartSeries(0, result, 1, 3);
assertAggregatedChartSeries(1, result, 3, 2);
}
@Test
public void generateCsv_MAIN_CHART() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generateCsv")
.locale(new Locale("pl", "PL"))
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.judgmentDateRange.startMonth", "1")
.param("globalFilter.judgmentDateRange.startYear", "2000")
.param("globalFilter.judgmentDateRange.endMonth", "1")
.param("globalFilter.judgmentDateRange.endYear", "2001")
.param("chartCode", "MAIN_CHART"));
// assert
String expectedCsvContent = buildCsvLine("Okres", "Liczba orzeczeń (phrase1)", "Liczba orzeczeń (phrase2)") + "\n"
+ buildCsvLine("1/2000", "4", "6") + "\n"
+ buildCsvLine("2/2000", "4", "3") + "\n"
+ buildCsvLine("3/2000", "0", "0") + "\n"
+ buildCsvLine("4/2000", "9", "7") + "\n"
+ buildCsvLine("5/2000", "1", "1") + "\n"
+ buildCsvLine("6/2000", "0", "0") + "\n"
+ buildCsvLine("7/2000", "0", "0") + "\n"
+ buildCsvLine("8/2000", "0", "0") + "\n"
+ buildCsvLine("9/2000", "1", "3") + "\n"
+ buildCsvLine("10/2000", "0", "0") + "\n"
+ buildCsvLine("11/2000", "0", "0") + "\n"
+ buildCsvLine("12/2000", "2", "1") + "\n"
+ buildCsvLine("1/2001", "0", "0") + "\n";
result.andExpect(content().string(expectedCsvContent));
}
@Test
public void generateCsv_CC_COURT_CHART() throws Exception {
// execute
ResultActions result = mockMvc.perform(get(URL_BASE + "/generateCsv")
.locale(new Locale("pl", "PL"))
.param("seriesFilters[0].phrase", "phrase1")
.param("seriesFilters[1].phrase", "phrase2")
.param("globalFilter.courtCriteria.courtType", "COMMON")
.param("chartCode", "CC_COURT_CHART"));
// assert
String expectedCsvContent = buildCsvLine("Sąd", "Liczba orzeczeń (phrase1)", "Liczba orzeczeń (phrase2)") + "\n"
+ buildCsvLine(appealCourt1.getName(), "8", "8") + "\n"
+ buildCsvLine(appealCourt2.getName(), "2", "1") + "\n";
result.andExpect(content().string(expectedCsvContent));
}
//------------------------ PRIVATE --------------------------
private void assertMainChartSeries(int seriesNumber, ResultActions result, int ... counts) throws Exception {
for (int i=0; i<counts.length; ++i) {
result.andExpect(jsonPath("$.charts.MAIN_CHART.seriesList.[%d].points.[%d]", seriesNumber, i).value(contains(i, counts[i])));
}
}
private void assertMainChartSeriesDouble(int seriesNumber, ResultActions result, double ... numbers) throws Exception {
for (int i=0; i<numbers.length; ++i) {
result
.andExpect(jsonPath("$.charts.MAIN_CHART.seriesList.[%d].points.[%d].[0]", seriesNumber, i).value(i))
.andExpect(jsonPath("$.charts.MAIN_CHART.seriesList.[%d].points.[%d].[1]", seriesNumber, i).value(closeTo(numbers[i], 0.0001)));
}
}
private void assertCcCourtChartSeries(int seriesNumber, ResultActions result, int ... counts) throws Exception {
for (int i=0; i<counts.length; ++i) {
result.andExpect(jsonPath("$.charts.CC_COURT_CHART.seriesList.[%d].points.[%d]", seriesNumber, i).value(contains(i, counts[i])));
}
}
private void assertAggregatedChartSeries(int seriesNumber, ResultActions result, int pointNumber, int count) throws Exception {
result.andExpect(jsonPath("$.charts.AGGREGATED_MAIN_CHART.seriesList.[%d].points.[0]", seriesNumber).value(contains(pointNumber, count)));
}
private void assertAggregatedChartSeriesDouble(int seriesNumber, ResultActions result, int pointNumber, double number) throws Exception {
result
.andExpect(jsonPath("$.charts.AGGREGATED_MAIN_CHART.seriesList.[%d].points.[0].[0]", seriesNumber).value(pointNumber))
.andExpect(jsonPath("$.charts.AGGREGATED_MAIN_CHART.seriesList.[%d].points.[0].[1]", seriesNumber).value(closeTo(number, 0.0001)));
}
private void assertMainChartXticksFor2000Year(ResultActions result) throws Exception {
assertMainChartMonthPeriodXticks(result,
new MonthPeriod(2000, 1, 2000, 1),
new MonthPeriod(2000, 2, 2000, 2),
new MonthPeriod(2000, 3, 2000, 3),
new MonthPeriod(2000, 4, 2000, 4),
new MonthPeriod(2000, 5, 2000, 5),
new MonthPeriod(2000, 6, 2000, 6),
new MonthPeriod(2000, 7, 2000, 7),
new MonthPeriod(2000, 8, 2000, 8),
new MonthPeriod(2000, 9, 2000, 9),
new MonthPeriod(2000, 10, 2000, 10),
new MonthPeriod(2000, 11, 2000, 11),
new MonthPeriod(2000, 12, 2000, 12),
new MonthPeriod(2001, 1, 2001, 1));
}
private void assertMainChartYearPeriodXticks(ResultActions result, YearPeriod ... periods) throws Exception {
String jsonBasePath = "$.charts.MAIN_CHART.xticks";
for (int i=0; i<periods.length; ++i) {
result
.andExpect(jsonPath(jsonBasePath +".[%d].[0]", i).value(i))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].startYear", i).value(periods[i].getStartYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].endYear", i).value(periods[i].getEndYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].period", i).value("YEAR"))
;
}
}
private void assertMainChartMonthPeriodXticks(ResultActions result, MonthPeriod ... periods) throws Exception {
String jsonBasePath = "$.charts.MAIN_CHART.xticks";
for (int i=0; i<periods.length; ++i) {
result
.andExpect(jsonPath(jsonBasePath +".[%d].[0]", i).value(i))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].startYear", i).value(periods[i].getStartYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].startMonthOfYear", i).value(periods[i].getStartMonthOfYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].endYear", i).value(periods[i].getEndYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].endMonthOfYear", i).value(periods[i].getEndMonthOfYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].period", i).value("MONTH"))
;
}
}
private void assertMainChartDayPeriodXticks(ResultActions result, DayPeriod ... periods) throws Exception {
String jsonBasePath = "$.charts.MAIN_CHART.xticks";
for (int i=0; i<periods.length; ++i) {
result
.andExpect(jsonPath(jsonBasePath +".[%d].[0]", i).value(i))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].startDay.year", i).value(periods[i].getStartDay().getYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].startDay.monthOfYear", i).value(periods[i].getStartDay().getMonthOfYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].startDay.dayOfMonth", i).value(periods[i].getStartDay().getDayOfMonth()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].endDay.year", i).value(periods[i].getEndDay().getYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].endDay.monthOfYear", i).value(periods[i].getEndDay().getMonthOfYear()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].endDay.dayOfMonth", i).value(periods[i].getEndDay().getDayOfMonth()))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].period", i).value("DAY"))
;
}
}
private void assertCcCourtChartXticks(ResultActions result, CommonCourt ... commonCourts) throws Exception {
String jsonBasePath = "$.charts.CC_COURT_CHART.xticks";
for (int i=0; i<commonCourts.length; ++i) {
result
.andExpect(jsonPath(jsonBasePath +".[%d].[0]", i).value(i))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].courtId", i).value(equalsLong(commonCourts[i].getId())))
.andExpect(jsonPath(jsonBasePath +".[%d].[1].name", i).value(commonCourts[i].getName()))
;
}
}
private JudgmentSeriesFilter createJudgmentSeriesFilter(String phrase) {
JudgmentSeriesFilter judgmentSeriesFilter = new JudgmentSeriesFilter();
judgmentSeriesFilter.setPhrase(phrase);
return judgmentSeriesFilter;
}
@Transactional
private void generateCommonCourts() {
appealCourt1 = createCommonCourt("Sąd Apelacyjny w Warszawie", "0001", CommonCourtType.APPEAL, null);
appealCourt1_division_1 = createCcDivision("I Wydział Cywilny", "001", appealCourt1);
appealCourt1_division_2 = createCcDivision("II Wydział Karny", "002", appealCourt1);
appealCourt1_division_3 = createCcDivision("III Wydział Pracy i Ubezpieczeń Społecznych", "003", appealCourt1);
regionalCourt1_1 = createCommonCourt("Sąd Okręgowy w Warszawie", "0011", CommonCourtType.REGIONAL, appealCourt1);
districtCourt1_1_1 = createCommonCourt("Sąd Rejonowy dla Warszawy-Mokotowa w Warszawie", "0111", CommonCourtType.DISTRICT, regionalCourt1_1);
districtCourt1_1_2 = createCommonCourt("Sąd Rejonowy w Piasecznie", "0211", CommonCourtType.DISTRICT, regionalCourt1_1);
regionalCourt1_2 = createCommonCourt("Sąd Okręgowy Warszawa-Praga w Warszawie", "0021", CommonCourtType.REGIONAL, appealCourt1);
appealCourt2 = createCommonCourt("Sąd Apelacyjny we Wrocławiu", "0002", CommonCourtType.APPEAL, null);
regionalCourt2_1 = createCommonCourt("Sąd Okręgowy w Legnicy", "0012", CommonCourtType.REGIONAL, appealCourt2);
commonCourtRepository.save(Lists.newArrayList(
appealCourt1, regionalCourt1_1, districtCourt1_1_1, districtCourt1_1_2, regionalCourt1_2,
appealCourt2, regionalCourt2_1));
commonCourtDivisionRepository.save(Lists.newArrayList(appealCourt1_division_1, appealCourt1_division_2, appealCourt1_division_3));
}
private CommonCourt createCommonCourt(String name, String code, CommonCourtType commonCourtType, CommonCourt parent) {
CommonCourt court = new CommonCourt();
court.setName(name);
court.setCode(code);
court.setType(commonCourtType);
court.setParentCourt(parent);
return court;
}
private CommonCourtDivision createCcDivision(String name, String code, CommonCourt court) {
CommonCourtDivision division = new CommonCourtDivision();
division.setName(name);
division.setCode(code);
division.setCourt(court);
return division;
}
private String buildCsvLine(String ... values) {
return Lists.newArrayList(values).stream().collect(Collectors.joining(";"));
}
@Transactional
private void generateSupremeCourtChambers() {
scChamber_1 = createSupremeCourtChamber("Izba Cywilna");
scChamber_1_division_1 = createSupremeCourtChamberDivision("Wydział I", "Izba Cywilna - Wydział I", scChamber_1);
scChamber_1_division_2 = createSupremeCourtChamberDivision("Wydział II", "Izba Cywilna - Wydział II", scChamber_1);
scChamber_2 = createSupremeCourtChamber("Izba Karna");
scChamber_2_division_1 = createSupremeCourtChamberDivision("Wydział I", "Izba Karna - Wydział I", scChamber_2);
scChamberRepository.save(Lists.newArrayList(scChamber_1, scChamber_2));
scChamberDivisionRepository.save(Lists.newArrayList(scChamber_1_division_1, scChamber_1_division_2, scChamber_2_division_1));
}
private SupremeCourtChamber createSupremeCourtChamber(String name) {
SupremeCourtChamber chamber = new SupremeCourtChamber();
chamber.setName(name);
return chamber;
}
private SupremeCourtChamberDivision createSupremeCourtChamberDivision(String name, String fullName, SupremeCourtChamber chamber) {
SupremeCourtChamberDivision division = new SupremeCourtChamberDivision();
division.setName(name);
division.setFullName(fullName);
division.setScChamber(chamber);
return division;
}
private SimpleCommonCourt createSimpleCommonCourt(CommonCourt commonCourt) {
SimpleCommonCourt simpleCommonCourt = new SimpleCommonCourt();
simpleCommonCourt.setId(commonCourt.getId());
simpleCommonCourt.setName(commonCourt.getName());
simpleCommonCourt.setType(commonCourt.getType());
return simpleCommonCourt;
}
private SimpleEntity createSimpleEntity(CommonCourtDivision ccDivision) {
SimpleEntity simpleEntity = new SimpleEntity();
simpleEntity.setId(ccDivision.getId());
simpleEntity.setName(ccDivision.getName());
return simpleEntity;
}
private SimpleEntity createSimpleEntity(SupremeCourtChamber scChamber) {
SimpleEntity simpleEntity = new SimpleEntity();
simpleEntity.setId(scChamber.getId());
simpleEntity.setName(scChamber.getName());
return simpleEntity;
}
private SimpleEntity createSimpleEntity(SupremeCourtChamberDivision scDivision) {
SimpleEntity simpleEntity = new SimpleEntity();
simpleEntity.setId(scDivision.getId());
simpleEntity.setName(scDivision.getName());
return simpleEntity;
}
private void indexJudgments() throws SolrServerException, IOException {
judgmentsServer.add(fetchDocument(19910503L, "1991-05-03T00:00:00Z", "phrase1"));
judgmentsServer.add(fetchDocument(19910505L, "1991-05-05T00:00:00Z", "phrase1"));
judgmentsServer.add(fetchDocument(19920910L, "1992-09-10T00:00:00Z", "phrase2"));
judgmentsServer.add(fetchDocument(19950510L, "1995-05-15T00:00:00Z", "phrase2"));
judgmentsServer.add(fetchDocument(19960305L, "1996-03-05T00:00:00Z", "phrase1"));
judgmentsServer.add(fetchDocument(19960404L, "1996-04-04T00:00:00Z", "phrase2"));
judgmentsServer.add(fetchDocument(19971130L, "1997-11-30T00:00:00Z", "phrase2"));
judgmentsServer.add(fetchDocument(19981221L, "1998-12-21T00:00:00Z", "phrase2"));
judgmentsServer.add(fetchDocument(19990108L, "1999-01-08T00:00:00Z", "phrase1"));
judgmentsServer.add(fetchDocument(19990305L, "1999-03-05T00:00:00Z", "phrase1"));
judgmentsServer.add(fetchDocument(19990805L, "1999-08-05T00:00:00Z", "phrase2"));
judgmentsServer.add(fetchDocument(103L, "2000-01-03T00:00:00Z", "phrase1", appealCourt1, appealCourt1_division_1));
judgmentsServer.add(fetchDocument(105L, "2000-01-05T00:00:00Z", "phrase2", appealCourt1, appealCourt1_division_1));
judgmentsServer.add(fetchDocument(107L, "2000-01-07T00:00:00Z", "phrase2", appealCourt1, appealCourt1_division_2));
judgmentsServer.add(fetchDocument(121L, "2000-01-21T00:00:00Z", "phrase3", appealCourt1, appealCourt1_division_1));
judgmentsServer.add(fetchDocument(125L, "2000-01-25T00:00:00Z", "phrase1", appealCourt1, appealCourt1_division_1));
judgmentsServer.add(fetchDocument(126L, "2000-01-26T00:00:00Z", "phrase2 phrase3", appealCourt1, appealCourt1_division_2));
judgmentsServer.add(fetchDocument(129L, "2000-01-29T00:00:00Z", "phrase1 phrase2", appealCourt1, appealCourt1_division_3));
judgmentsServer.add(fetchDocument(130L, "2000-01-30T00:00:00Z", "phrase2", appealCourt1, appealCourt1_division_1));
judgmentsServer.add(fetchDocument(1311L, "2000-01-31T00:00:00Z", "phrase1", appealCourt2, null));
judgmentsServer.add(fetchDocument(1312L, "2000-01-31T00:00:00Z", "phrase2", scChamber_1, scChamber_1_division_2));
judgmentsServer.add(fetchDocument(204L, "2000-02-04T00:00:00Z", "phrase1", scChamber_1, scChamber_1_division_1));
judgmentsServer.add(fetchDocument(222L, "2000-02-22T00:00:00Z", "phrase1", scChamber_1, scChamber_1_division_2));
judgmentsServer.add(fetchDocument(223L, "2000-02-23T00:00:00Z", "phrase1", scChamber_2, scChamber_2_division_1));
judgmentsServer.add(fetchDocument(224L, "2000-02-24T00:00:00Z", "phrase1", scChamber_1, scChamber_1_division_1));
judgmentsServer.add(fetchDocument(225L, "2000-02-25T00:00:00Z", "phrase2", scChamber_1, scChamber_1_division_1));
judgmentsServer.add(fetchDocument(226L, "2000-02-26T00:00:00Z", "phrase2", scChamber_1, scChamber_1_division_1));
judgmentsServer.add(fetchDocument(227L, "2000-02-27T00:00:00Z", "phrase2", scChamber_1, scChamber_1_division_2));
judgmentsServer.add(fetchDocument(403L, "2000-04-03T00:00:00Z", "phrase1", appealCourt1, null));
judgmentsServer.add(fetchDocument(404L, "2000-04-04T00:00:00Z", "phrase1", appealCourt1, null));
judgmentsServer.add(fetchDocument(405L, "2000-04-05T00:00:00Z", "phrase2", appealCourt2, null));
judgmentsServer.add(fetchDocument(406L, "2000-04-06T00:00:00Z", "phrase1", regionalCourt1_1, null));
judgmentsServer.add(fetchDocument(407L, "2000-04-07T00:00:00Z", "phrase2", regionalCourt1_1, null));
judgmentsServer.add(fetchDocument(408L, "2000-04-08T00:00:00Z", "phrase2", regionalCourt1_2, null));
judgmentsServer.add(fetchDocument(409L, "2000-04-09T00:00:00Z", "phrase1", regionalCourt2_1, null));
judgmentsServer.add(fetchDocument(410L, "2000-04-10T00:00:00Z", "phrase1", districtCourt1_1_1, null));
judgmentsServer.add(fetchDocument(411L, "2000-04-11T00:00:00Z", "phrase1", districtCourt1_1_1, null));
judgmentsServer.add(fetchDocument(412L, "2000-04-12T00:00:00Z", "phrase2", districtCourt1_1_2, null));
judgmentsServer.add(fetchDocument(415L, "2000-04-15T00:00:00Z", "phrase1", scChamber_1, scChamber_1_division_1));
judgmentsServer.add(fetchDocument(416L, "2000-04-16T00:00:00Z", "phrase1", scChamber_1, scChamber_1_division_2));
judgmentsServer.add(fetchDocument(417L, "2000-04-17T00:00:00Z", "phrase2", scChamber_1, scChamber_1_division_2));
judgmentsServer.add(fetchDocument(418L, "2000-04-18T00:00:00Z", "phrase2", scChamber_2, scChamber_2_division_1));
judgmentsServer.add(fetchDocument(419L, "2000-04-19T00:00:00Z", "phrase2", scChamber_2, scChamber_2_division_1));
judgmentsServer.add(fetchDocument(420L, "2000-04-20T00:00:00Z", "phrase1", scChamber_2, scChamber_2_division_1));
judgmentsServer.add(fetchDocument(504L, "2000-05-04T00:00:00Z", "phrase1 phrase2 phrase3"));
judgmentsServer.add(fetchDocument(909L, "2000-09-09T00:00:00Z", "phrase1 phrase2"));
judgmentsServer.add(fetchDocument(9301L, "2000-09-30T00:00:00Z", "phrase2"));
judgmentsServer.add(fetchDocument(9302L, "2000-09-30T00:00:00Z", "phrase2"));
judgmentsServer.add(fetchDocument(1223L, "2000-12-23T00:00:00Z", "phrase1"));
judgmentsServer.add(fetchDocument(1227L, "2000-12-27T00:00:00Z", "phrase1 phrase2"));
judgmentsServer.commit();
}
private SolrInputDocument fetchDocument(long id, String judgmentDateString, String content) {
SolrInputDocument doc = new SolrInputDocument();
doc.addField("databaseId", id);
doc.addField("judgmentDate", judgmentDateString);
doc.addField("content", content);
return doc;
}
private SolrInputDocument fetchDocument(long id, String judgmentDateString, String content, CommonCourt court, CommonCourtDivision division) {
SolrInputDocument doc = fetchDocument(id, judgmentDateString, content);
fillCommonCourtFields(doc, court, division);
return doc;
}
private SolrInputDocument fetchDocument(long id, String judgmentDateString, String content, SupremeCourtChamber chamber, SupremeCourtChamberDivision division) {
SolrInputDocument doc = fetchDocument(id, judgmentDateString, content);
fillSupremeCourtFields(doc, chamber, division);
return doc;
}
private void fillCommonCourtFields(SolrInputDocument doc, CommonCourt court, CommonCourtDivision division) {
doc.addField(JudgmentIndexField.COURT_TYPE.getFieldName(), "COMMON");
if (court != null) {
doc.addField(JudgmentIndexField.CC_COURT_ID.getFieldName(), court.getId());
doc.addField(JudgmentIndexField.CC_APPEAL_COURT_ID.getFieldName(), court.getAppealCourt().getId());
doc.addField(JudgmentIndexField.CC_APPEAL_AREA.getFieldName(), ccCourtAreaFieldValueCreator.createCcCourtAreaFieldValue(null, court.getAppealCourt()));
if (court.isAppealCourt()) {
doc.addField(CC_REGION_AREA.getFieldName(), ccCourtAreaFieldValueCreator.createCcCourtAreaFieldValue(court.getId(), court));
}
if (court.isRegionalCourt()) {
doc.addField(CC_REGIONAL_COURT_ID.getFieldName(), court.getId());
doc.addField(CC_REGION_AREA.getFieldName(), ccCourtAreaFieldValueCreator.createCcCourtAreaFieldValue(court.getAppealCourt().getId(), court.getRegionalCourt()));
doc.addField(CC_DISTRICT_AREA.getFieldName(), ccCourtAreaFieldValueCreator.createCcCourtAreaFieldValue(court.getId(), court));
}
if (court.isDistrictCourt()) {
doc.addField(CC_REGIONAL_COURT_ID.getFieldName(), court.getRegionalCourt().getId());
doc.addField(CC_REGION_AREA.getFieldName(), ccCourtAreaFieldValueCreator.createCcCourtAreaFieldValue(court.getAppealCourt().getId(), court.getRegionalCourt()));
doc.addField(CC_DISTRICT_COURT_ID.getFieldName(), court.getId());
doc.addField(CC_DISTRICT_AREA.getFieldName(), ccCourtAreaFieldValueCreator.createCcCourtAreaFieldValue(court.getRegionalCourt().getId(), court));
}
}
if (division != null) {
doc.addField(JudgmentIndexField.CC_COURT_DIVISION_ID.getFieldName(), division.getId());
}
}
private void fillSupremeCourtFields(SolrInputDocument doc, SupremeCourtChamber chamber, SupremeCourtChamberDivision division) {
doc.addField(JudgmentIndexField.COURT_TYPE.getFieldName(), "SUPREME");
if (chamber != null) {
doc.addField(JudgmentIndexField.SC_COURT_CHAMBER_ID.getFieldName(), chamber.getId());
}
if (division != null) {
doc.addField(JudgmentIndexField.SC_COURT_DIVISION_ID.getFieldName(), division.getId());
}
}
}