From: <zep...@us...> - 2007-06-27 14:40:05
|
Revision: 321 http://flatpack.svn.sourceforge.net/flatpack/?rev=321&view=rev Author: zepernick Date: 2007-06-27 07:39:57 -0700 (Wed, 27 Jun 2007) Log Message: ----------- Changed package structure from pzfilereader to flatpack More to come...Going to be removing the PZ from any applicable class names Modified Paths: -------------- trunk/flatpack/src/main/java/pzconvert.properties trunk/flatpack/src/test/java/net/sf/pzfilereader/columninfile/DelimitedColumnNamesInFile.java trunk/flatpack/src/test/java/net/sf/pzfilereader/columninfile/DelimitedColumnNamesInFileTest.java trunk/flatpack/src/test/java/net/sf/pzfilereader/delim/tab/TabDelimited.java trunk/flatpack/src/test/java/net/sf/pzfilereader/delim/tab/TabDelimitedTest.java trunk/flatpack/src/test/java/net/sf/pzfilereader/parserutils/FixedWidthParserUtilsTest.java trunk/flatpack/src/test/java/net/sf/pzfilereader/parserutils/ParserUtilsLTrimTest.java trunk/flatpack/src/test/java/net/sf/pzfilereader/parserutils/ParserUtilsSplitLineTest.java trunk/flatpack/src/test/java/net/sf/pzfilereader/parserutils/ParserUtilsTest.java trunk/flatpack/src/test/java/net/sf/pzfilereader/pzparser/PZParserOptsTest.java Added Paths: ----------- trunk/flatpack/src/main/java/net/sf/flatpack/ trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/AbstractFixedLengthPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/AbstractPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/DBDelimiterPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/DBFixedLengthPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/DataError.java trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java trunk/flatpack/src/main/java/net/sf/flatpack/DefaultPZParserFactory.java trunk/flatpack/src/main/java/net/sf/flatpack/DelimiterPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/FixedLengthPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/InitialisationException.java trunk/flatpack/src/main/java/net/sf/flatpack/PZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/PZParserFactory.java trunk/flatpack/src/main/java/net/sf/flatpack/Version.java trunk/flatpack/src/main/java/net/sf/flatpack/brparse/ trunk/flatpack/src/main/java/net/sf/flatpack/brparse/BuffReaderDelimPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/brparse/BuffReaderFixedPZParser.java trunk/flatpack/src/main/java/net/sf/flatpack/brparse/BuffReaderPZDataSet.java trunk/flatpack/src/main/java/net/sf/flatpack/brparse/BuffReaderPZParseFactory.java trunk/flatpack/src/main/java/net/sf/flatpack/brparse/package.html trunk/flatpack/src/main/java/net/sf/flatpack/converter/ trunk/flatpack/src/main/java/net/sf/flatpack/converter/ConvertBigDecimal.java trunk/flatpack/src/main/java/net/sf/flatpack/converter/ConvertDouble.java trunk/flatpack/src/main/java/net/sf/flatpack/converter/ConvertInteger.java trunk/flatpack/src/main/java/net/sf/flatpack/converter/PZConvertException.java trunk/flatpack/src/main/java/net/sf/flatpack/converter/PZConverter.java trunk/flatpack/src/main/java/net/sf/flatpack/converter/package.html trunk/flatpack/src/main/java/net/sf/flatpack/ordering/ trunk/flatpack/src/main/java/net/sf/flatpack/ordering/OrderBy.java trunk/flatpack/src/main/java/net/sf/flatpack/ordering/OrderColumn.java trunk/flatpack/src/main/java/net/sf/flatpack/ordering/package.html trunk/flatpack/src/main/java/net/sf/flatpack/package.html trunk/flatpack/src/main/java/net/sf/flatpack/structure/ trunk/flatpack/src/main/java/net/sf/flatpack/structure/ColumnMetaData.java trunk/flatpack/src/main/java/net/sf/flatpack/structure/Row.java trunk/flatpack/src/main/java/net/sf/flatpack/structure/package.html trunk/flatpack/src/main/java/net/sf/flatpack/util/ trunk/flatpack/src/main/java/net/sf/flatpack/util/ExcelTransformer.java trunk/flatpack/src/main/java/net/sf/flatpack/util/FixedWidthParserUtils.java trunk/flatpack/src/main/java/net/sf/flatpack/util/PZConstants.java trunk/flatpack/src/main/java/net/sf/flatpack/util/PZStringUtils.java trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java trunk/flatpack/src/main/java/net/sf/flatpack/util/package.html trunk/flatpack/src/main/java/net/sf/flatpack/xml/ trunk/flatpack/src/main/java/net/sf/flatpack/xml/PZMapParser.java trunk/flatpack/src/main/java/net/sf/flatpack/xml/PZMetaData.java trunk/flatpack/src/main/java/net/sf/flatpack/xml/ResolveLocalDTD.java trunk/flatpack/src/main/java/net/sf/flatpack/xml/XMLRecordElement.java trunk/flatpack/src/main/java/net/sf/flatpack/xml/package.html trunk/flatpack/src/main/java/net/sf/flatpack/xml/pzfilereader.dtd Removed Paths: ------------- trunk/flatpack/src/main/java/net/sf/pzfilereader/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <zep...@us...> - 2007-08-17 18:57:37
|
Revision: 340 http://flatpack.svn.sourceforge.net/flatpack/?rev=340&view=rev Author: zepernick Date: 2007-08-17 11:57:37 -0700 (Fri, 17 Aug 2007) Log Message: ----------- added contains() method to check for the existance of a column name for the current row. Modified Paths: -------------- trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java Added Paths: ----------- trunk/flatpack/src/test/java/net/sf/flatpack/DataSetFunctionalityTest.java Modified: trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java 2007-08-17 18:50:00 UTC (rev 339) +++ trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java 2007-08-17 18:57:37 UTC (rev 340) @@ -312,4 +312,13 @@ * */ void clearAll(); + + /** + * Does this DataSet contain a column with the given name? + * + * @param column + * Column name to check for + * @return boolean + */ + boolean contains(final String column); } \ No newline at end of file Modified: trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java 2007-08-17 18:50:00 UTC (rev 339) +++ trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java 2007-08-17 18:57:37 UTC (rev 340) @@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Properties; @@ -481,4 +482,21 @@ buf.append("MetaData:").append(metaData).append(System.getProperty("line.separator")); return buf.toString(); } + + public boolean contains(String column) { + if (pointer == -1) { + throw new IndexOutOfBoundsException("dataset on invalid row. need to call next()"); + } + + final Iterator cmds = ParserUtils.getColumnMetaData(((Row) rows.get(pointer)).getMdkey(), metaData).iterator(); + while (cmds.hasNext()) { + final ColumnMetaData cmd = (ColumnMetaData)cmds.next(); + if (cmd.getColName().equalsIgnoreCase(column)) { + return true; + } + } + + return false; + + } } Added: trunk/flatpack/src/test/java/net/sf/flatpack/DataSetFunctionalityTest.java =================================================================== --- trunk/flatpack/src/test/java/net/sf/flatpack/DataSetFunctionalityTest.java (rev 0) +++ trunk/flatpack/src/test/java/net/sf/flatpack/DataSetFunctionalityTest.java 2007-08-17 18:57:37 UTC (rev 340) @@ -0,0 +1,26 @@ +package net.sf.flatpack; + +import java.io.StringReader; + +import net.sf.flatpack.util.FPConstants; +import junit.framework.TestCase; + +/** + * Test methods in the DataSet + * + * @author Paul Zepernick + */ +public class DataSetFunctionalityTest extends TestCase { + + public void testContains() { + DataSet ds; + final String cols = "column1,column2,column3\r\n value1,value2,value3"; + Parser p = DefaultParserFactory.getInstance().newDelimitedParser(new StringReader(cols), ',', FPConstants.NO_QUALIFIER); + ds = p.parse(); + ds.next(); + assertEquals("column should NOT be found...", false, ds.contains("shouldnotcontain")); + + assertEquals("column should be found...", true, ds.contains("column1")); + + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <zep...@us...> - 2007-11-03 01:55:34
|
Revision: 365 http://flatpack.svn.sourceforge.net/flatpack/?rev=365&view=rev Author: zepernick Date: 2007-11-02 18:55:33 -0700 (Fri, 02 Nov 2007) Log Message: ----------- Fixed bug 1811210 Modified Paths: -------------- trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java trunk/flatpack/src/test/java/net/sf/flatpack/parserutils/ParserUtilsSplitLineTest.java Modified: trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java 2007-10-02 00:51:22 UTC (rev 364) +++ trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java 2007-11-03 01:55:33 UTC (rev 365) @@ -215,11 +215,13 @@ protected String fetchNextRecord(final BufferedReader br, final char qual, final char delim) throws IOException { String line = null; final StringBuffer lineData = new StringBuffer(); + final String linebreak = System.getProperty("line.separator"); boolean processingMultiLine = false; while ((line = br.readLine()) != null) { lineCount++; final String trimmed = line.trim(); + final int trimmedLen = trimmed.length(); if (!processingMultiLine && trimmed.length() == 0) { //empty line skip past it, as long as it //is not part of the multiline @@ -240,7 +242,7 @@ // the record final String trimmedLineData = lineData.toString().trim(); - if (processingMultiLine && trimmedLineData.length() > 0) { + if (processingMultiLine && trimmedLineData.length() > 0 && trimmedLen > 0) { // need to do one last check here. it is possible that the " // could be part of the data // excel will escape these with another quote; here is some @@ -250,11 +252,11 @@ // it is safe to assume we have reached the end of the // line break processingMultiLine = false; - lineData.append("\r\n").append(line); + lineData.append(linebreak).append(line); } else { // check to see if this is the last line of the record // looking for a qualifier followed by a delimiter - lineData.append("\r\n").append(line); + lineData.append(linebreak).append(line); boolean qualiFound = false; for (int i = 0; i < chrArry.length; i++) { if (qualiFound) { @@ -296,7 +298,9 @@ } } else { // throw the line into lineData var. - lineData.append(line); + //need to check to see if we need to insert a line break. + //The buffered reader excludes the breaks + lineData.append(trimmedLen == 0 ? linebreak : line); if (processingMultiLine) { continue; // if we are working on a multiline rec, get // the data on the next line Modified: trunk/flatpack/src/test/java/net/sf/flatpack/parserutils/ParserUtilsSplitLineTest.java =================================================================== --- trunk/flatpack/src/test/java/net/sf/flatpack/parserutils/ParserUtilsSplitLineTest.java 2007-10-02 00:51:22 UTC (rev 364) +++ trunk/flatpack/src/test/java/net/sf/flatpack/parserutils/ParserUtilsSplitLineTest.java 2007-11-03 01:55:33 UTC (rev 365) @@ -85,6 +85,12 @@ (String) splitLineResults.get(j)); } } + + ParserUtils.splitLine("26,\"10726/1996\",551,\"Extra\",08/04/2005 00:00:00,0,0,,\"The unanimous judgement of the Team is that:\n" + + "\n" + + "(i) The members have to pay the amount on time. \n" + + "\n" + + "(ii) There would be regular meeting biweekly. \"", ',', '"', 10); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <zep...@us...> - 2007-11-17 16:14:16
|
Revision: 377 http://flatpack.svn.sourceforge.net/flatpack/?rev=377&view=rev Author: zepernick Date: 2007-11-17 08:14:04 -0800 (Sat, 17 Nov 2007) Log Message: ----------- Added an option on the Parser setFlagEmptyRows(). This will make the DataSet.isRowEmpty() method available. This method will return true when there is no data on any columns in the row. Modified Paths: -------------- trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java trunk/flatpack/src/main/java/net/sf/flatpack/AbstractFixedLengthParser.java trunk/flatpack/src/main/java/net/sf/flatpack/AbstractParser.java trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java trunk/flatpack/src/main/java/net/sf/flatpack/Parser.java trunk/flatpack/src/main/java/net/sf/flatpack/structure/Row.java trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java trunk/flatpack/src/test/java/net/sf/flatpack/parserutils/ParserUtilsTest.java trunk/flatpack/src/test/java/net/sf/flatpack/pzparser/PZParserOptsTest.java Modified: trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/main/java/net/sf/flatpack/AbstractDelimiterParser.java 2007-11-17 16:14:04 UTC (rev 377) @@ -35,6 +35,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; +import java.util.Iterator; import java.util.List; import net.sf.flatpack.structure.Row; @@ -45,14 +46,17 @@ import org.slf4j.LoggerFactory; /** - * @author xhensevb - * @author zepernick + * @author Benoit Xhenseval + * @author Paul Zepernick * */ public abstract class AbstractDelimiterParser extends AbstractParser { private char delimiter = 0; + private char qualifier = 0; + private boolean ignoreFirstRecord = false; + private int lineCount = 0; private final Logger logger = LoggerFactory.getLogger(AbstractDelimiterParser.class); @@ -156,7 +160,7 @@ // Incorrect record length on line log the error. Line // will not be included in the dataset log the error if (isIgnoreExtraColumns()) { - //user has choosen to ignore the fact that we have too many columns in the data from + //user has chosen to ignore the fact that we have too many columns in the data from //what the mapping has described. sublist the array to remove un-needed columns columns = columns.subList(0, columnCount); addError(ds, "TRUNCATED LINE TO CORRECT NUMBER OF COLUMNS", lineCount, 1); @@ -187,6 +191,12 @@ row.setRowNumber(lineCount); /** add the row to the array */ ds.addRow(row); + + if (isFlagEmptyRows()) { + //user has elected to have the parser flag rows that are empty + row.setEmpty(ParserUtils.isListElementsEmpty(columns)); + } + } } finally { if (br != null) { @@ -206,7 +216,7 @@ * Open reader being used to read through the file * @param qual * Qualifier being used for parse - * @parma delim + * @param delim * Delimiter being used for parse * @return String * Record from delimited file @@ -267,24 +277,6 @@ break; } qualiFound = false; - //tried to replace the code below due to checkstyle error - //} else { - // not a space, if this char is the - // delimiter, then we have reached the end - // of - // the record - // if (chrArry[i] == delim) { - // processingMultiLine = false; - // fix put in, setting to false caused - // bug when processing multiple - // multi-line - // columns on the same record - // processingMultiLine = ParserUtils.isMultiLine(chrArry, delim, qual); - // break; - // } - // qualiFound = false; - // continue; - // } } else if (chrArry[i] == qual) { qualiFound = true; } Modified: trunk/flatpack/src/main/java/net/sf/flatpack/AbstractFixedLengthParser.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/AbstractFixedLengthParser.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/main/java/net/sf/flatpack/AbstractFixedLengthParser.java 2007-11-17 16:14:04 UTC (rev 377) @@ -139,6 +139,12 @@ final List cmds = ParserUtils.getColumnMetaData(mdkey, getPzMetaData()); row.addColumn(FixedWidthParserUtils.splitFixedText(cmds, line)); row.setRowNumber(lineCount); + + if (isFlagEmptyRows()) { + //user has elected to have the parser flag rows that are empty + row.setEmpty(ParserUtils.isListElementsEmpty(row.getCols())); + } + // add the row to the array ds.addRow(row); } Modified: trunk/flatpack/src/main/java/net/sf/flatpack/AbstractParser.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/AbstractParser.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/main/java/net/sf/flatpack/AbstractParser.java 2007-11-17 16:14:04 UTC (rev 377) @@ -70,6 +70,8 @@ private List readersToClose = null; + private boolean flagEmptyRows; + protected AbstractParser(final Reader dataSourceReader) { this.dataSourceReader = dataSourceReader; } @@ -243,4 +245,18 @@ public void setPzMetaData(final MetaData pzMap) { this.pzMetaData = pzMap; } + + /** + * @return the flagEmptyRows + */ + public boolean isFlagEmptyRows() { + return flagEmptyRows; + } + + /** + * @param flagEmptyRows the flagEmptyRows to set + */ + public void setFlagEmptyRows(boolean flagEmptyRows) { + this.flagEmptyRows = flagEmptyRows; + } } Modified: trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/main/java/net/sf/flatpack/DataSet.java 2007-11-17 16:14:04 UTC (rev 377) @@ -264,7 +264,7 @@ /** * Setting this to True will parse text as is and throw a * NumberFormatException. Setting to false, which is the default, will - * remove any non numeric charcter from the field. The remaining numeric + * remove any non numeric character from the field. The remaining numeric * chars's will be returned. If it is an empty string,or there are no * numeric chars, 0 will be returned for getInt() and getDouble() * @@ -320,4 +320,12 @@ * @return boolean */ boolean contains(final String column); + + /** + * Checks to see if there was no data on the row which was parsed. This + * will thrown an exception if Parser.FlagEmptyRows() is not set to true. + * + * @return + */ + boolean isRowEmpty(); } \ No newline at end of file Modified: trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java 2007-11-17 16:14:04 UTC (rev 377) @@ -46,6 +46,7 @@ import net.sf.flatpack.structure.ColumnMetaData; import net.sf.flatpack.structure.Row; import net.sf.flatpack.util.FPConstants; +import net.sf.flatpack.util.FPInvalidUsageException; import net.sf.flatpack.util.FPStringUtils; import net.sf.flatpack.util.ParserUtils; import net.sf.flatpack.xml.MetaData; @@ -494,4 +495,17 @@ return false; } + + /** + * @throws FPInvalidUsageException + */ + public boolean isRowEmpty() { + if (!parser.isFlagEmptyRows()) { + //flag empty rows needs to be set for this functionality + //throw an exception + throw new FPInvalidUsageException("Parser.isFlagEmptyRows(true) must be set before using isRowEmpty()"); + } + + return ((Row)rows.get(pointer)).isEmpty(); + } } Modified: trunk/flatpack/src/main/java/net/sf/flatpack/Parser.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/Parser.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/main/java/net/sf/flatpack/Parser.java 2007-11-17 16:14:04 UTC (rev 377) @@ -36,15 +36,16 @@ * PZParser is ready to parse the data and return an object that can then be * traversed. The default parser should NOT handle short lines, the user can * change it prior to calling parse. - * + * * @author Benoit Xhenseval + * @author Paul Zepernick */ public interface Parser { /** - * Start the parsing. Will return "null" if the - * parse fails and the DataSet cannot be created - * + * Start the parsing. Will return "null" if the parse fails and the DataSet + * cannot be created + * * @return the data set resulting from parsing */ DataSet parse(); @@ -57,70 +58,97 @@ /** * @param handleShortLines - - * when flaged as true, lines with less columns then the amount + * when flagged as true, lines with less columns then the amount * of column headers will be added as empty's instead of * producing an error */ void setHandlingShortLines(final boolean handleShortLines); /** - * + * * @return true, detail lines with a length or column count > the mapping - * definition will be truncated and the reader will NOT register these - * lines as erros in the DataError collection. + * definition will be truncated and the reader will NOT register + * these lines as errors in the DataError collection. */ boolean isIgnoreExtraColumns(); /** - * - * @param ignoreExtraColumns when true, detail lines with a length or column - * count > the mapping definition will be truncated and the reader - * will NOT register these lines as erros in the DataError collection. + * + * @param ignoreExtraColumns + * when true, detail lines with a length or column count > the + * mapping definition will be truncated and the reader will NOT + * register these lines as errors in the DataError collection. */ void setIgnoreExtraColumns(final boolean ignoreExtraColumns); /** * Default is false - * - * @return true, column names will have to be an exact match when retrieving the value of a column. - * Example when true: Column name = AColumnName ; getString("acolumnname") would fail - * Example when false: Column name = AColumnName ; getString("acolumnname") would pass + * + * @return true, column names will have to be an exact match when retrieving + * the value of a column. Example when true: Column name = + * AColumnName ; getString("acolumnname") would fail Example when + * false: Column name = AColumnName ; getString("acolumnname") would + * pass */ boolean isColumnNamesCaseSensitive(); /** * Default is false - * - * @param columnNamesCaseSensitive when true, column names will have to be an exact match when retrieving - * the value of a column. - * Example when true: Column name = AColumnName ; getString("acolumnname") would fail - * Example when false: Column name = AColumnName ; getString("acolumnname") would pass + * + * @param columnNamesCaseSensitive + * when true, column names will have to be an exact match when + * retrieving the value of a column. Example when true: Column + * name = AColumnName ; getString("acolumnname") would fail + * Example when false: Column name = AColumnName ; + * getString("acolumnname") would pass */ void setColumnNamesCaseSensitive(final boolean columnNamesCaseSensitive); /** * Default is false - * - * @return true, warnings encountered durring parsing will not be included in the DataSet errors + * + * @return true, warnings encountered during parsing will not be included in + * the DataSet errors */ boolean isIgnoreParseWarnings(); /** - * - * @param ignoreParseWarnings when true, warnings encountered durring parsing will not be included - * in the DataSet errors + * + * @param ignoreParseWarnings + * when true, warnings encountered during parsing will not be + * included in the DataSet errors */ void setIgnoreParseWarnings(final boolean ignoreParseWarnings); /** - * - * @return true, empty Strings will get returned as NULL when calling DataSet.getString() + * + * @return true, empty Strings will get returned as NULL when calling + * DataSet.getString() */ boolean isNullEmptyStrings(); /** - * - * @param nullEmptyStrings when true, empty Strings will get returned as NULL when calling DataSet.getString() + * + * @param nullEmptyStrings + * when true, empty Strings will get returned as NULL when + * calling DataSet.getString() */ void setNullEmptyStrings(final boolean nullEmptyStrings); + + /** + * + * @return flagEmptyRows when true, will analyze the row to see if all + * elements are empty and place a flag on the DataSet indicating if + * the row is empty + */ + boolean isFlagEmptyRows(); + + /** + * when true, will analyze the row to see if all elements are empty and + * place a flag on the DataSet indicating if the row is empty. This will slow + * down the parse and should only be used when necessary. It is off by default. + * + * @param flagEmptyRows + */ + void setFlagEmptyRows(final boolean flagEmptyRows); } Modified: trunk/flatpack/src/main/java/net/sf/flatpack/structure/Row.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/structure/Row.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/main/java/net/sf/flatpack/structure/Row.java 2007-11-17 16:14:04 UTC (rev 377) @@ -1,16 +1,34 @@ /* - Copyright 2006 Paul Zepernick - - Licensed 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. + * ObjectLab, http://www.objectlab.co.uk/open is supporting FlatPack. + * + * Based in London, we are world leaders in the design and development + * of bespoke applications for the securities financing markets. + * + * <a href="http://www.objectlab.co.uk/open">Click here to learn more</a> + * ___ _ _ _ _ _ + * / _ \| |__ (_) ___ ___| |_| | __ _| |__ + * | | | | '_ \| |/ _ \/ __| __| | / _` | '_ \ + * | |_| | |_) | | __/ (__| |_| |__| (_| | |_) | + * \___/|_.__// |\___|\___|\__|_____\__,_|_.__/ + * |__/ + * + * www.ObjectLab.co.uk + * + * $Id: ColorProvider.java 74 2006-10-24 22:19:05Z benoitx $ + * + * Copyright 2006 the original author or authors. + * + * Licensed 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 net.sf.flatpack.structure; @@ -19,10 +37,9 @@ /** * This holds a collection of columns and their values along with the actual - * rownumber they appear in the flat file + * row number they appear in the flat file * * @author Paul Zepernick - * @version 2.0 */ public class Row { /** List to hold all columns that exist in the row */ @@ -33,13 +50,14 @@ /** key to the MD for this row, null will indicate it is "detail" MD */ private String mdkey; + + private boolean empty; /** * Constructs a new Row * */ public Row() { - mdkey = null; cols = new ArrayList(); } @@ -141,4 +159,22 @@ public void setMdkey(final String mdkey) { this.mdkey = mdkey; } + + /** + * All columns in the row are empty + * + * @return the empty + */ + public boolean isEmpty() { + return empty; + } + + /** + * When true, all columns in the row are empty + * + * @param empty the empty to set + */ + public void setEmpty(boolean empty) { + this.empty = empty; + } } \ No newline at end of file Modified: trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java =================================================================== --- trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/main/java/net/sf/flatpack/util/ParserUtils.java 2007-11-17 16:14:04 UTC (rev 377) @@ -1004,6 +1004,26 @@ return pzConvertProps; } + + /** + * Checks a list of <String> elements to see if every element + * in the list is empty. + * + * @param l + * List of <String> + * @return boolean + * true when all elements are empty + */ + public static boolean isListElementsEmpty(final List l) { + final Iterator it = l.iterator(); + while (it.hasNext()) { + final String s = (String)it.next(); + if (s != null && s.trim().length() > 0) { + return false; + } + } + return true; + } /** * Converts a String value to the appropriate Object via Modified: trunk/flatpack/src/test/java/net/sf/flatpack/parserutils/ParserUtilsTest.java =================================================================== --- trunk/flatpack/src/test/java/net/sf/flatpack/parserutils/ParserUtilsTest.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/test/java/net/sf/flatpack/parserutils/ParserUtilsTest.java 2007-11-17 16:14:04 UTC (rev 377) @@ -2,9 +2,11 @@ import java.io.IOException; import java.math.BigDecimal; +import java.util.List; import java.util.Properties; import junit.framework.TestCase; +import net.sf.flatpack.util.FPConstants; import net.sf.flatpack.util.ParserUtils; /** @@ -54,6 +56,12 @@ assertEquals(ParserUtils.runPzConverter(convertProps, "$5.00C", Integer.class), new Integer("5")); assertEquals(ParserUtils.runPzConverter(convertProps, "$5.3556", BigDecimal.class), new BigDecimal("5.3556")); } + + public void testEmptyRow() { + final String data = ",,,"; + final List l = ParserUtils.splitLine(data, ',', FPConstants.NO_QUALIFIER, 4); + assertEquals("list should be empty and is not...", ParserUtils.isListElementsEmpty(l), true); + } public static void main(final String[] args) { junit.textui.TestRunner.run(ParserUtilsTest.class); Modified: trunk/flatpack/src/test/java/net/sf/flatpack/pzparser/PZParserOptsTest.java =================================================================== --- trunk/flatpack/src/test/java/net/sf/flatpack/pzparser/PZParserOptsTest.java 2007-11-17 14:48:09 UTC (rev 376) +++ trunk/flatpack/src/test/java/net/sf/flatpack/pzparser/PZParserOptsTest.java 2007-11-17 16:14:04 UTC (rev 377) @@ -8,6 +8,7 @@ import net.sf.flatpack.DefaultParserFactory; import net.sf.flatpack.Parser; import net.sf.flatpack.util.FPConstants; +import net.sf.flatpack.util.FPInvalidUsageException; /** * Test the different options that can be @@ -81,7 +82,29 @@ fail("Column was mapped as 'column2' and lookup was 'COLUMN2'...should NOT fail with case sensitivity turned OFF"); } } + + public void testEmptyRowCheck() { + DataSet ds; + final String cols = "column1,column2,column3\r\n,,"; + + //check to see if the flag empty rows works + Parser p = DefaultParserFactory.getInstance().newDelimitedParser(new StringReader(cols), ',', FPConstants.NO_QUALIFIER); + p.setFlagEmptyRows(true); + ds = p.parse(); + ds.next(); + assertEquals("Row should return empty...", ds.isRowEmpty(), true); + + //do not set to flag empty rows, but make the check anyhow to make sure we get an exception + p = DefaultParserFactory.getInstance().newDelimitedParser(new StringReader(cols), ',', FPConstants.NO_QUALIFIER); + ds = p.parse(); + ds.next(); + try { + ds.isRowEmpty(); + fail("should have got FPInvalidUsageException..."); + } catch(FPInvalidUsageException e){} + } + public static void main(final String[] args) { junit.textui.TestRunner.run(PZParserOptsTest.class); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |