Skip to content

Commit 0beb4fb

Browse files
author
hongwei.quhw
committed
columnInfoFunction重构与单测
1 parent 2b1ade6 commit 0beb4fb

File tree

15 files changed

+624
-33
lines changed

15 files changed

+624
-33
lines changed

rdf-file-core/src/main/java/com/alipay/rdf/file/codec/ColumnInfoVerticalCodec.java

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
import com.alipay.rdf.file.exception.RdfFileException;
55
import com.alipay.rdf.file.interfaces.FileReader;
66
import com.alipay.rdf.file.interfaces.FileWriter;
7-
import com.alipay.rdf.file.loader.TemplateLoader;
87
import com.alipay.rdf.file.meta.FileColumnMeta;
9-
import com.alipay.rdf.file.meta.FileMeta;
108
import com.alipay.rdf.file.model.FileConfig;
119
import com.alipay.rdf.file.model.FileDataTypeEnum;
1210
import com.alipay.rdf.file.util.RdfFileUtil;
@@ -24,47 +22,18 @@ public class ColumnInfoVerticalCodec extends AbstractColumnInfoCodec {
2422

2523
public static void serialize(FileDataTypeEnum layoutType, FileDataTypeEnum dataType, FileConfig fileConfig,
2624
FileWriter writer, String method) {
27-
FileMeta fileMeta = TemplateLoader.load(fileConfig);
28-
29-
boolean startWithSplit = null != RdfFileUtil.getRowSplit(fileConfig) && fileMeta.isStartWithSplit(layoutType);
30-
boolean endtWithSplit = null != RdfFileUtil.getRowSplit(fileConfig) && fileMeta.isEndWithSplit(layoutType);
31-
3225
//按行写入column字段
3326
for (FileColumnMeta colMeta : getColumnMetas(fileConfig, dataType)) {
34-
StringBuilder line = new StringBuilder();
35-
if (startWithSplit) {
36-
line.append(RdfFileUtil.getRowSplit(fileConfig));
37-
}
38-
39-
line.append(getValue(colMeta, method));
40-
41-
if (endtWithSplit) {
42-
line.append(RdfFileUtil.getRowSplit(fileConfig));
43-
}
44-
45-
writer.writeLine(line.toString());
27+
writer.writeLine(getValue(colMeta, method));
4628
}
4729
}
4830

4931
public static <T> T deserialize(FileDataTypeEnum layoutType, FileDataTypeEnum dataType, FileConfig fileConfig,
5032
FileReader reader, String method) {
51-
FileMeta fileMeta = TemplateLoader.load(fileConfig);
52-
boolean startWithSplit = null != RdfFileUtil.getRowSplit(fileConfig) && fileMeta.isStartWithSplit(layoutType);
53-
boolean endtWithSplit = null != RdfFileUtil.getRowSplit(fileConfig) && fileMeta.isEndWithSplit(layoutType);
54-
5533
for (FileColumnMeta colMeta : getColumnMetas(fileConfig, dataType)) {
5634
String columName = RdfFileUtil.assertTrimNotBlank(reader.readLine());
57-
5835
RdfFileUtil.assertNotBlank(columName, "文件=" + fileConfig.getFilePath() + ", " + layoutType.name() + " 内容缺失");
5936

60-
if (startWithSplit) {
61-
columName = columName.substring(RdfFileUtil.getRowSplit(fileConfig).length());
62-
}
63-
64-
if (endtWithSplit) {
65-
columName = columName.substring(0, columName.length() - RdfFileUtil.getRowSplit(fileConfig).length());
66-
}
67-
6837
String tempalteValue = getValue(colMeta, method);
6938
if (!tempalteValue.equals(columName)) {
7039
throw new RdfFileException(
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
package com.alipay.rdf.file.reader;
2+
3+
import com.alipay.rdf.file.interfaces.FileFactory;
4+
import com.alipay.rdf.file.interfaces.FileReader;
5+
import com.alipay.rdf.file.model.FileConfig;
6+
import com.alipay.rdf.file.model.StorageConfig;
7+
import com.alipay.rdf.file.util.DateUtil;
8+
import com.alipay.rdf.file.util.TemporaryFolderUtil;
9+
import junit.framework.Assert;
10+
import org.junit.After;
11+
import org.junit.Before;
12+
import org.junit.Test;
13+
14+
import java.io.File;
15+
import java.io.IOException;
16+
import java.math.BigDecimal;
17+
import java.util.Date;
18+
import java.util.HashMap;
19+
import java.util.Map;
20+
21+
/**
22+
* @author hongwei.quhw
23+
* @version $Id: FileReaderCmTest.java, v 0.1 2017年4月7日 下午5:38:15 hongwei.quhw Exp $
24+
*/
25+
public class FileReaderCmExtTest {
26+
TemporaryFolderUtil tf = new TemporaryFolderUtil();
27+
28+
@Before
29+
public void setUp() throws IOException {
30+
tf.create();
31+
}
32+
33+
/**
34+
* 测试行前后带分隔符场景
35+
*/
36+
@Test
37+
public void testReadCMExtFile() {
38+
String filePath = File.class.getResource("/reader/cm/data/data4.txt").getPath();
39+
40+
FileConfig config = new FileConfig(filePath, "/reader/cm/template/template4.json",
41+
new StorageConfig("nas"));
42+
43+
FileReader fileReader = FileFactory.createReader(config);
44+
45+
Map<String, Object> head = fileReader.readHead(HashMap.class);
46+
Assert.assertEquals(new Long(100), head.get("totalCount"));
47+
Assert.assertEquals(new BigDecimal("300.03"), head.get("totalAmount"));
48+
49+
Map<String, Object> row = fileReader.readRow(HashMap.class);
50+
Assert.assertEquals("seq_0", row.get("seq"));
51+
Assert.assertEquals("inst_seq_0", row.get("instSeq"));
52+
Assert.assertEquals("2013-11-09 12:34:56",
53+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
54+
Assert.assertEquals("20131109", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
55+
Assert.assertEquals("20131112 12:23:34",
56+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
57+
Assert.assertEquals(new BigDecimal("23.33"), row.get("applyNumber"));
58+
Assert.assertEquals(new BigDecimal("10.22"), row.get("amount"));
59+
Assert.assertEquals(new Integer(22), row.get("age"));
60+
Assert.assertEquals(new Long(12345), row.get("longN"));
61+
Assert.assertEquals(Boolean.TRUE, row.get("bol"));
62+
Assert.assertEquals("备注1", row.get("memo"));
63+
64+
row = fileReader.readRow(HashMap.class);
65+
Assert.assertEquals("seq_1", row.get("seq"));
66+
Assert.assertEquals("inst_seq_1", row.get("instSeq"));
67+
Assert.assertEquals("2013-11-10 15:56:12",
68+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
69+
Assert.assertEquals("20131110", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
70+
Assert.assertEquals("20131113 12:33:34",
71+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
72+
Assert.assertEquals(new BigDecimal("23.34"), row.get("applyNumber"));
73+
Assert.assertEquals(new BigDecimal("11.88"), row.get("amount"));
74+
Assert.assertEquals(new Integer(33), row.get("age"));
75+
Assert.assertEquals(new Long(56789), row.get("longN"));
76+
Assert.assertEquals(Boolean.FALSE, row.get("bol"));
77+
Assert.assertNull(row.get("memo"));
78+
79+
row = fileReader.readRow(HashMap.class);
80+
Assert.assertNull(row);
81+
82+
Map<String, Object> tail = fileReader.readTail(HashMap.class);
83+
Assert.assertEquals("endFile", tail.get("fileEnd"));
84+
85+
fileReader.close();
86+
}
87+
88+
89+
@Test
90+
public void testReadCMExtFile2() {
91+
String filePath = File.class.getResource("/reader/cm/data/data5.txt").getPath();
92+
93+
FileConfig config = new FileConfig(filePath, "/reader/cm/template/template5.json",
94+
new StorageConfig("nas"));
95+
96+
FileReader fileReader = FileFactory.createReader(config);
97+
98+
Map<String, Object> head = fileReader.readHead(HashMap.class);
99+
Assert.assertEquals(new Long(100), head.get("totalCount"));
100+
Assert.assertEquals(new BigDecimal("300.03"), head.get("totalAmount"));
101+
102+
Map<String, Object> row = fileReader.readRow(HashMap.class);
103+
Assert.assertEquals("seq_0", row.get("seq"));
104+
Assert.assertEquals("inst_seq_0", row.get("instSeq"));
105+
Assert.assertEquals("2013-11-09 12:34:56",
106+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
107+
Assert.assertEquals("20131109", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
108+
Assert.assertEquals("20131112 12:23:34",
109+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
110+
Assert.assertEquals(new BigDecimal("23.33"), row.get("applyNumber"));
111+
Assert.assertEquals(new BigDecimal("10.22"), row.get("amount"));
112+
Assert.assertEquals(new Integer(22), row.get("age"));
113+
Assert.assertEquals(new Long(12345), row.get("longN"));
114+
Assert.assertEquals(Boolean.TRUE, row.get("bol"));
115+
Assert.assertEquals("备注1", row.get("memo"));
116+
117+
row = fileReader.readRow(HashMap.class);
118+
Assert.assertEquals("seq_1", row.get("seq"));
119+
Assert.assertEquals("inst_seq_1", row.get("instSeq"));
120+
Assert.assertEquals("2013-11-10 15:56:12",
121+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
122+
Assert.assertEquals("20131110", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
123+
Assert.assertEquals("20131113 12:33:34",
124+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
125+
Assert.assertEquals(new BigDecimal("23.34"), row.get("applyNumber"));
126+
Assert.assertEquals(new BigDecimal("11.88"), row.get("amount"));
127+
Assert.assertEquals(new Integer(33), row.get("age"));
128+
Assert.assertEquals(new Long(56789), row.get("longN"));
129+
Assert.assertEquals(Boolean.FALSE, row.get("bol"));
130+
Assert.assertNull(row.get("memo"));
131+
132+
row = fileReader.readRow(HashMap.class);
133+
Assert.assertNull(row);
134+
135+
Map<String, Object> tail = fileReader.readTail(HashMap.class);
136+
Assert.assertEquals("endFile", tail.get("fileEnd"));
137+
138+
fileReader.close();
139+
}
140+
141+
142+
@After
143+
public void after() {
144+
tf.delete();
145+
}
146+
}

rdf-file-core/src/test/java/com/alipay/rdf/file/reader/FileReaderCmTest.java

Lines changed: 111 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,118 @@ public void setUp() throws IOException {
3232
tf.create();
3333
}
3434

35+
/**
36+
* 测试行前后带分隔符场景
37+
*/
3538
@Test
36-
public void testReadDEFile() throws Exception {
39+
public void testReadCMFile3() {
40+
String filePath = File.class.getResource("/reader/cm/data/data3.txt").getPath();
41+
42+
FileConfig config = new FileConfig(filePath, "/reader/cm/template/template3.json",
43+
new StorageConfig("nas"));
44+
45+
FileReader fileReader = FileFactory.createReader(config);
46+
47+
Map<String, Object> head = fileReader.readHead(HashMap.class);
48+
Assert.assertEquals(new Long(100), head.get("totalCount"));
49+
Assert.assertEquals(new BigDecimal("300.03"), head.get("totalAmount"));
50+
51+
Map<String, Object> row = fileReader.readRow(HashMap.class);
52+
Assert.assertEquals("seq_0", row.get("seq"));
53+
Assert.assertEquals("inst_seq_0", row.get("instSeq"));
54+
Assert.assertEquals("2013-11-09 12:34:56",
55+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
56+
Assert.assertEquals("20131109", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
57+
Assert.assertEquals("20131112 12:23:34",
58+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
59+
Assert.assertEquals(new BigDecimal("23.33"), row.get("applyNumber"));
60+
Assert.assertEquals(new BigDecimal("10.22"), row.get("amount"));
61+
Assert.assertEquals(new Integer(22), row.get("age"));
62+
Assert.assertEquals(new Long(12345), row.get("longN"));
63+
Assert.assertEquals(Boolean.TRUE, row.get("bol"));
64+
Assert.assertEquals("备注1", row.get("memo"));
65+
66+
row = fileReader.readRow(HashMap.class);
67+
Assert.assertEquals("seq_1", row.get("seq"));
68+
Assert.assertEquals("inst_seq_1", row.get("instSeq"));
69+
Assert.assertEquals("2013-11-10 15:56:12",
70+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
71+
Assert.assertEquals("20131110", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
72+
Assert.assertEquals("20131113 12:33:34",
73+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
74+
Assert.assertEquals(new BigDecimal("23.34"), row.get("applyNumber"));
75+
Assert.assertEquals(new BigDecimal("11.88"), row.get("amount"));
76+
Assert.assertEquals(new Integer(33), row.get("age"));
77+
Assert.assertEquals(new Long(56789), row.get("longN"));
78+
Assert.assertEquals(Boolean.FALSE, row.get("bol"));
79+
Assert.assertNull(row.get("memo"));
80+
81+
row = fileReader.readRow(HashMap.class);
82+
Assert.assertNull(row);
83+
84+
Map<String, Object> tail = fileReader.readTail(HashMap.class);
85+
Assert.assertEquals("endFile", tail.get("fileEnd"));
86+
87+
fileReader.close();
88+
}
89+
90+
/**
91+
* 测试行前后带分隔符场景
92+
*/
93+
@Test
94+
public void testReadCMFile2() {
95+
String filePath = File.class.getResource("/reader/cm/data/data2.txt").getPath();
96+
97+
FileConfig config = new FileConfig(filePath, "/reader/cm/template/template2.json",
98+
new StorageConfig("nas"));
99+
100+
FileReader fileReader = FileFactory.createReader(config);
101+
102+
Map<String, Object> head = fileReader.readHead(HashMap.class);
103+
Assert.assertEquals(new Long(100), head.get("totalCount"));
104+
Assert.assertEquals(new BigDecimal("300.03"), head.get("totalAmount"));
105+
106+
Map<String, Object> row = fileReader.readRow(HashMap.class);
107+
Assert.assertEquals("seq_0", row.get("seq"));
108+
Assert.assertEquals("inst_seq_0", row.get("instSeq"));
109+
Assert.assertEquals("2013-11-09 12:34:56",
110+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
111+
Assert.assertEquals("20131109", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
112+
Assert.assertEquals("20131112 12:23:34",
113+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
114+
Assert.assertEquals(new BigDecimal("23.33"), row.get("applyNumber"));
115+
Assert.assertEquals(new BigDecimal("10.22"), row.get("amount"));
116+
Assert.assertEquals(new Integer(22), row.get("age"));
117+
Assert.assertEquals(new Long(12345), row.get("longN"));
118+
Assert.assertEquals(Boolean.TRUE, row.get("bol"));
119+
Assert.assertEquals("备注1", row.get("memo"));
120+
121+
row = fileReader.readRow(HashMap.class);
122+
Assert.assertEquals("seq_1", row.get("seq"));
123+
Assert.assertEquals("inst_seq_1", row.get("instSeq"));
124+
Assert.assertEquals("2013-11-10 15:56:12",
125+
DateUtil.format((Date) row.get("gmtApply"), "yyyy-MM-dd HH:mm:ss"));
126+
Assert.assertEquals("20131110", DateUtil.format((Date) row.get("date"), "yyyyMMdd"));
127+
Assert.assertEquals("20131113 12:33:34",
128+
DateUtil.format((Date) row.get("dateTime"), "yyyyMMdd HH:mm:ss"));
129+
Assert.assertEquals(new BigDecimal("23.34"), row.get("applyNumber"));
130+
Assert.assertEquals(new BigDecimal("11.88"), row.get("amount"));
131+
Assert.assertEquals(new Integer(33), row.get("age"));
132+
Assert.assertEquals(new Long(56789), row.get("longN"));
133+
Assert.assertEquals(Boolean.FALSE, row.get("bol"));
134+
Assert.assertNull(row.get("memo"));
135+
136+
row = fileReader.readRow(HashMap.class);
137+
Assert.assertNull(row);
138+
139+
Map<String, Object> tail = fileReader.readTail(HashMap.class);
140+
Assert.assertEquals("endFile", tail.get("fileEnd"));
141+
142+
fileReader.close();
143+
}
144+
145+
@Test
146+
public void testReadCMFile() throws Exception {
37147
String filePath = File.class.getResource("/reader/cm/data/data1.txt").getPath();
38148

39149
FileConfig config = new FileConfig(filePath, "/reader/cm/template/template1.json",

0 commit comments

Comments
 (0)