@Test public void test6() { PartitionByDate partition = new PartitionByDate(); partition.setDateFormat("yyyy-MM-dd"); partition.setsBeginDate("2014-01-01"); partition.setsEndDate("2014-01-30"); partition.setsPartionDay("10"); partition.init(); Assert.assertEquals(true, null == partition.calculate("2012-12-31")); }
@Override public void init() { try { partitionTime = Integer.parseInt(sPartionDay) * ONE_DAY; beginDate = new SimpleDateFormat(dateFormat).parse(sBeginDate).getTime(); if (!StringUtil.isEmpty(sEndDate)) { endDate = new SimpleDateFormat(dateFormat).parse(sEndDate).getTime(); nCount = (int) ((endDate - beginDate) / partitionTime) + 1; } formatter = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat(dateFormat); } }; } catch (ParseException e) { throw new java.lang.IllegalArgumentException(e); } initHashCode(); }
@Override public Integer[] calculateRange(String beginValue, String endValue) { SimpleDateFormat format = new SimpleDateFormat(this.dateFormat); try { Date begin = format.parse(beginValue); Date end = format.parse(endValue); Calendar cal = Calendar.getInstance(); List<Integer> list = new ArrayList<>(); while (begin.getTime() <= end.getTime()) { Integer nodeValue = this.calculate(format.format(begin)); if (Collections.frequency(list, nodeValue) < 1) list.add(nodeValue); cal.setTime(begin); cal.add(Calendar.DATE, 1); begin = cal.getTime(); } Integer[] nodeArray = new Integer[list.size()]; for (int i = 0; i < list.size(); i++) { nodeArray[i] = list.get(i); } return nodeArray; } catch (ParseException e) { LOGGER.info("error", e); return new Integer[0]; } }
private AbstractPartitionAlgorithm createFunction(String name, String clazz) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException { String lowerClass = clazz.toLowerCase(); switch (lowerClass) { case "hash": return new PartitionByLong(); case "stringhash": return new PartitionByString(); case "enum": return new PartitionByFileMap(); case "jumpstringhash": return new PartitionByJumpConsistentHash(); case "numberrange": return new AutoPartitionByLong(); case "patternrange": return new PartitionByPattern(); case "date": return new PartitionByDate(); default: Class<?> clz = Class.forName(clazz); //all function must be extend from AbstractPartitionAlgorithm if (!AbstractPartitionAlgorithm.class.isAssignableFrom(clz)) { throw new IllegalArgumentException("rule function must implements " + AbstractPartitionAlgorithm.class.getName() + ", name=" + name); } return (AbstractPartitionAlgorithm) clz.newInstance(); } }
@Test public void test8() { PartitionByDate partition = new PartitionByDate(); partition.setDateFormat("yyyy-MM-dd"); partition.setsBeginDate("2014-01-01"); partition.setsPartionDay("10"); partition.setDefaultNode(0); partition.init(); Assert.assertEquals(true, 0 == partition.calculate("2012-12-31")); } }
@Test public void test7() { PartitionByDate partition = new PartitionByDate(); partition.setDateFormat("yyyy-MM-dd"); partition.setsBeginDate("2014-01-01"); partition.setsEndDate("2014-01-30"); partition.setsPartionDay("10"); partition.setDefaultNode(0); partition.init(); Assert.assertEquals(true, 0 == partition.calculate("2012-12-31")); }
@Test public void test4() { PartitionByDate partition = new PartitionByDate(); partition.setDateFormat("yyyy-MM-dd"); partition.setsBeginDate("2014-01-01"); partition.setsEndDate("2014-01-30"); partition.setsPartionDay("10"); partition.init(); thrown.expect(IllegalArgumentException.class); partition.calculate("2014/01/01"); }
@Test public void test5() { PartitionByDate partition = new PartitionByDate(); partition.setDateFormat("yyyy-MM-dd"); partition.setsBeginDate("2014-01-01"); partition.setsEndDate("2014-01-30"); partition.setsPartionDay("10"); partition.init(); Assert.assertEquals(true, 0 == partition.calculate("2014-01-01 12:00:03")); }
@Test public void test1() { PartitionByDate partition = new PartitionByDate(); partition.setDateFormat("yyyy-MM-dd"); partition.setsBeginDate("2014-01-01"); partition.setsPartionDay("10"); partition.init(); Assert.assertEquals(true, 0 == partition.calculate("2014-01-01")); Assert.assertEquals(true, 0 == partition.calculate("2014-01-10")); Assert.assertEquals(true, 1 == partition.calculate("2014-01-11")); Assert.assertEquals(true, 12 == partition.calculate("2014-05-01")); }
@Test public void test3() { PartitionByDate partition = new PartitionByDate(); partition.setDateFormat("yyyy-MM-dd"); partition.setsBeginDate("2014-01-01"); partition.setsEndDate("2014-01-30"); partition.setsPartionDay("10"); partition.init(); /** * 0 : 01.01-01.10,01.31-02.09 * 1 : 01.11-01.20,02.10-02.19 * 2 : 01.21-01.30,02.20-03.01 */ Assert.assertEquals(true, 0 == partition.calculate("2014-01-01")); Assert.assertEquals(true, 0 == partition.calculate("2014-01-10")); Assert.assertEquals(true, 1 == partition.calculate("2014-01-11")); Assert.assertEquals(true, 2 == partition.calculate("2014-01-30")); Assert.assertEquals(true, 0 == partition.calculate("2014-01-31")); Assert.assertEquals(true, 0 == partition.calculate("2014-02-09")); Assert.assertEquals(true, 1 == partition.calculate("2014-02-10")); Assert.assertEquals(true, 1 == partition.calculate("2014-02-19")); Assert.assertEquals(true, 2 == partition.calculate("2014-02-20")); Assert.assertEquals(true, 2 == partition.calculate("2014-03-01")); }
@Test public void test2() { PartitionByDate partition = new PartitionByDate(); partition.setDateFormat("yyyy-MM-dd"); partition.setsBeginDate("2014-01-01"); partition.setsEndDate("2014-01-31"); partition.setsPartionDay("10"); partition.init(); /** * 0 : 01.01-01.10,02.10-02.19 * 1 : 01.11-01.20,02.20-03.01 * 2 : 01.21-01.30,03.02-03.12 * 3 : 01.31-02-09,03.13-03.23 */ Assert.assertEquals(true, 0 == partition.calculate("2014-01-01")); Assert.assertEquals(true, 0 == partition.calculate("2014-01-10")); Assert.assertEquals(true, 1 == partition.calculate("2014-01-11")); Assert.assertEquals(true, 3 == partition.calculate("2014-01-31")); Assert.assertEquals(true, 3 == partition.calculate("2014-02-01")); Assert.assertEquals(true, 0 == partition.calculate("2014-02-19")); Assert.assertEquals(true, 1 == partition.calculate("2014-02-20")); Assert.assertEquals(true, 1 == partition.calculate("2014-03-01")); Assert.assertEquals(true, 2 == partition.calculate("2014-03-02")); Assert.assertEquals(true, 2 == partition.calculate("2014-03-11")); Assert.assertEquals(true, 3 == partition.calculate("2014-03-20")); Assert.assertEquals(true, 0 == partition.calculate("2014-03-24")); }