Repository: metamodel Updated Branches: refs/heads/master 1758ae206 -> 4895b801c
METAMODEL-207: Fixed Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/ef354e83 Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/ef354e83 Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/ef354e83 Branch: refs/heads/master Commit: ef354e837f815e3bfde7661913561c384999117c Parents: 1758ae2 Author: Kasper Sørensen <i.am.kasper.soren...@gmail.com> Authored: Fri Nov 6 14:49:09 2015 +0100 Committer: Kasper Sørensen <i.am.kasper.soren...@gmail.com> Committed: Fri Nov 6 14:49:09 2015 +0100 ---------------------------------------------------------------------- .../apache/metamodel/csv/SingleLineCsvRow.java | 23 ++++++-- .../metamodel/csv/SingleLineCsvRowTest.java | 59 ++++++++++++++++++++ 2 files changed, 76 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/ef354e83/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java ---------------------------------------------------------------------- diff --git a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java index bdd3beb..439dc91 100644 --- a/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java +++ b/csv/src/main/java/org/apache/metamodel/csv/SingleLineCsvRow.java @@ -19,6 +19,7 @@ package org.apache.metamodel.csv; import java.io.IOException; +import java.io.ObjectOutputStream; import org.apache.metamodel.MetaModelException; import org.apache.metamodel.data.AbstractRow; @@ -38,17 +39,20 @@ final class SingleLineCsvRow extends AbstractRow { private static final long serialVersionUID = 1L; private static final Logger logger = LoggerFactory.getLogger(SingleLineCsvRow.class); + + private final transient SingleLineCsvDataSet _dataSet; - private final SingleLineCsvDataSet _dataSet; private final String _line; private final int _columnsInTable; private final boolean _failOnInconsistentRowLength; private final int _rowNumber; + private final DataSetHeader _header; private String[] _values; public SingleLineCsvRow(SingleLineCsvDataSet dataSet, final String line, final int columnsInTable, final boolean failOnInconsistentRowLength, final int rowNumber) { _dataSet = dataSet; + _header = dataSet.getHeader(); _line = line; _columnsInTable = columnsInTable; _failOnInconsistentRowLength = failOnInconsistentRowLength; @@ -69,12 +73,11 @@ final class SingleLineCsvRow extends AbstractRow { // convert the line's values into the row values that where // requested - final DataSetHeader header = _dataSet.getHeader(); - final int size = header.size(); + final int size = _header.size(); final String[] rowValues = new String[size]; for (int i = 0; i < size; i++) { - final Column column = header.getSelectItem(i).getColumn(); + final Column column = _header.getSelectItem(i).getColumn(); final int columnNumber = column.getColumnNumber(); if (columnNumber < csvValues.length) { rowValues[i] = csvValues[columnNumber]; @@ -90,6 +93,12 @@ final class SingleLineCsvRow extends AbstractRow { return _values; } + private void writeObject(ObjectOutputStream stream) throws IOException { + // ensure that values are loaded + getValues(); + stream.defaultWriteObject(); + } + private String[] parseLine() { try { final CSVParser parser = _dataSet.getCsvParser(); @@ -98,7 +107,9 @@ final class SingleLineCsvRow extends AbstractRow { if (_failOnInconsistentRowLength) { throw new MetaModelException("Failed to parse CSV line no. " + _rowNumber + ": " + _line, e); } else { - logger.warn("Encountered unparseable line no. {}, returning line as a single value with trailing nulls: {}", _rowNumber, _line); + logger.warn( + "Encountered unparseable line no. {}, returning line as a single value with trailing nulls: {}", + _rowNumber, _line); String[] csvValues = new String[_columnsInTable]; csvValues[0] = _line; return csvValues; @@ -120,7 +131,7 @@ final class SingleLineCsvRow extends AbstractRow { @Override protected DataSetHeader getHeader() { - return _dataSet.getHeader(); + return _header; } } http://git-wip-us.apache.org/repos/asf/metamodel/blob/ef354e83/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java ---------------------------------------------------------------------- diff --git a/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java new file mode 100644 index 0000000..bed494e --- /dev/null +++ b/csv/src/test/java/org/apache/metamodel/csv/SingleLineCsvRowTest.java @@ -0,0 +1,59 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.metamodel.csv; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import org.apache.metamodel.data.Row; +import org.apache.metamodel.schema.Column; +import org.apache.metamodel.schema.MutableColumn; +import org.junit.Assert; +import org.junit.Test; + +import au.com.bytecode.opencsv.CSVParser; + +public class SingleLineCsvRowTest { + + @Test + public void testSerialize() throws Exception { + final Column[] columns = new Column[] { new MutableColumn("1"), new MutableColumn("2") }; + CSVParser csvParser = new CSVParser(); + final SingleLineCsvDataSet dataSet = new SingleLineCsvDataSet(null, csvParser, columns, null, 2, false); + final SingleLineCsvRow originalRow = new SingleLineCsvRow(dataSet, "foo,bar", 2, false, 1); + + final ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + final ObjectOutputStream out = new ObjectOutputStream(bytes); + out.writeObject(originalRow); + out.flush(); + bytes.flush(); + + final byte[] byteArray = bytes.toByteArray(); + Assert.assertTrue(byteArray.length > 0); + + final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteArray)); + final Row deserializedRow = (Row) in.readObject(); + + final Object[] values1 = originalRow.getValues(); + final Object[] values2 = deserializedRow.getValues(); + Assert.assertArrayEquals(values1, values2); + } +}