From: <zep...@us...> - 2006-11-11 20:42:27
|
Revision: 174 http://svn.sourceforge.net/pzfilereader/?rev=174&view=rev Author: zepernick Date: 2006-11-11 12:42:15 -0800 (Sat, 11 Nov 2006) Log Message: ----------- first attempt at a new getObject() method in the IDataSet Benoit, if you get a chance take a look and let me know what you think of the implementation. I am currently getting some NPE's in the unit tests. This is because it is not finding the pzconvert.properties file. I tried to modify the ant script to make sure it was getting included, but I am having some trouble. I can take a look at it later and see what the deal is. Paul Modified Paths: -------------- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/AbstractDelimiterPZParser.java trunk/PZFileReader/src/main/java/net/sf/pzfilereader/AbstractFixedLengthPZParser.java trunk/PZFileReader/src/main/java/net/sf/pzfilereader/DataSet.java trunk/PZFileReader/src/main/java/net/sf/pzfilereader/DefaultDataSet.java trunk/PZFileReader/src/main/java/net/sf/pzfilereader/IDataSet.java Added Paths: ----------- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/ConvertBigDecimal.java trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/PZConvertException.java trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/PZConverter.java trunk/PZFileReader/src/main/java/pzconvert.properties Modified: trunk/PZFileReader/src/main/java/net/sf/pzfilereader/AbstractDelimiterPZParser.java =================================================================== --- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/AbstractDelimiterPZParser.java 2006-11-04 17:11:08 UTC (rev 173) +++ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/AbstractDelimiterPZParser.java 2006-11-11 20:42:15 UTC (rev 174) @@ -38,7 +38,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URL; import java.util.List; +import java.util.Properties; import net.sf.pzfilereader.structure.Row; import net.sf.pzfilereader.util.PZConstants; @@ -152,6 +154,13 @@ BufferedReader br = null; final DefaultDataSet ds = new DefaultDataSet(getColumnMD()); try { + //gather the conversion properties + final Properties pzConvertProps = new Properties(); + final URL url = getClass().getClassLoader().getResource("pzconvert.properties"); + pzConvertProps.load(url.openStream()); + ds.setPZConvertProps(pzConvertProps); + + // get the total column count // columnCount = columnMD.size(); Modified: trunk/PZFileReader/src/main/java/net/sf/pzfilereader/AbstractFixedLengthPZParser.java =================================================================== --- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/AbstractFixedLengthPZParser.java 2006-11-04 17:11:08 UTC (rev 173) +++ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/AbstractFixedLengthPZParser.java 2006-11-11 20:42:15 UTC (rev 174) @@ -38,8 +38,10 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URL; import java.util.List; import java.util.Map; +import java.util.Properties; import net.sf.pzfilereader.structure.Row; import net.sf.pzfilereader.util.FixedWidthParserUtils; @@ -110,6 +112,13 @@ final DefaultDataSet ds = new DefaultDataSet(getColumnMD()); try { + //gather the conversion properties + final Properties pzConvertProps = new Properties(); + final URL url = getClass().getClassLoader().getResource("pzconvert.properties"); + pzConvertProps.load(url.openStream()); + ds.setPZConvertProps(pzConvertProps); + + final Map recordLengths = ParserUtils.calculateRecordLengths(getColumnMD()); // Read in the flat file Modified: trunk/PZFileReader/src/main/java/net/sf/pzfilereader/DataSet.java =================================================================== --- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/DataSet.java 2006-11-04 17:11:08 UTC (rev 173) +++ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/DataSet.java 2006-11-11 20:42:15 UTC (rev 174) @@ -31,6 +31,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Properties; import net.sf.pzfilereader.ordering.OrderBy; import net.sf.pzfilereader.structure.ColumnMetaData; @@ -1383,4 +1384,17 @@ public void setErrors(final List errors) { this.errors = errors; } + + public Object getObject(String column, Class classToConvertTo) { + // TODO May have to do something here if we plan on keeping + //this around for the next version. I believe this will + //be leaving + return null; + } + + public void setPZConvertProps(Properties props) { + // TODO May have to do something here if we plan on keeping + //this around for the next version. I believe this will + //be leaving + } } Modified: trunk/PZFileReader/src/main/java/net/sf/pzfilereader/DefaultDataSet.java =================================================================== --- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/DefaultDataSet.java 2006-11-04 17:11:08 UTC (rev 173) +++ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/DefaultDataSet.java 2006-11-11 20:42:15 UTC (rev 174) @@ -40,7 +40,10 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Properties; +import net.sf.pzfilereader.converter.PZConvertException; +import net.sf.pzfilereader.converter.PZConverter; import net.sf.pzfilereader.ordering.OrderBy; import net.sf.pzfilereader.structure.ColumnMetaData; import net.sf.pzfilereader.structure.Row; @@ -55,6 +58,8 @@ private final List rows = new ArrayList(); private final List errors = new ArrayList(); + + private Properties pzConvertProps = null; /** Pointer for the current row in the array we are on */ private int pointer = -1; @@ -170,6 +175,24 @@ return Double.parseDouble(newString.toString()); } + + + public Object getObject(String column, Class classToConvertTo) { + final String sConverter = pzConvertProps.getProperty(classToConvertTo.getName()); + if (sConverter == null) { + throw new PZConvertException (classToConvertTo.getName() + " is not registered in pzconvert.properties"); + } + try{ + final Row row = (Row) rows.get(pointer); + final String s = row.getValue(ParserUtils.getColumnIndex(row.getMdkey(), columnMD, column)); + final PZConverter pzconverter = (PZConverter)Class.forName(sConverter).newInstance(); + + return pzconverter.convertValue(s); + + } catch (Exception ex) { + throw new PZConvertException (ex); + } + } /* * (non-Javadoc) @@ -422,6 +445,10 @@ rows.remove(pointer); pointer--; } + + public void setPZConvertProps(Properties props) { + this.pzConvertProps = props; + } void setColumnMD(final Map columnMD) { this.columnMD = columnMD; Modified: trunk/PZFileReader/src/main/java/net/sf/pzfilereader/IDataSet.java =================================================================== --- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/IDataSet.java 2006-11-04 17:11:08 UTC (rev 173) +++ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/IDataSet.java 2006-11-11 20:42:15 UTC (rev 174) @@ -37,6 +37,7 @@ import java.util.Date; import java.util.List; import java.util.NoSuchElementException; +import java.util.Properties; import net.sf.pzfilereader.ordering.OrderBy; @@ -128,6 +129,20 @@ * @return Date */ Date getDate(final String column, final SimpleDateFormat sdf) throws ParseException; + + + /** + * Returns the value of the column with the type of object + * specified + * + * @param column + * Name of the column + * @param classToConvertTo + * Class type to convert to + * @return Object + * Value of the column in the specified object + */ + Object getObject(final String column, final Class classToConvertTo); /** * Returns a String array of column names in the DataSet. This will assume @@ -257,4 +272,14 @@ * The strictNumericParse to set. */ void setStrictNumericParse(final boolean strictNumericParse); + + /** + * Sets the properties from the pzconvert.properties file. + * This file specifies the PZConverter implementation to use + * for a particular class + * + * @param props + * Property mapping for String to Object conversion + */ + void setPZConvertProps(Properties props); } \ No newline at end of file Added: trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/ConvertBigDecimal.java =================================================================== --- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/ConvertBigDecimal.java (rev 0) +++ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/ConvertBigDecimal.java 2006-11-11 20:42:15 UTC (rev 174) @@ -0,0 +1,20 @@ +package net.sf.pzfilereader.converter; + +import java.math.BigDecimal; + +import net.sf.pzfilereader.util.ParserUtils; + +/** + * Returns a BigInt + * @author zepernick + */ +public class ConvertBigDecimal implements PZConverter{ + /* + * (non-Javadoc) + * + * @see net.sf.pzfilereader.converter#convertValue(java.lang.String) + */ + public Object convertValue(String valueToConvert) { + return new BigDecimal(ParserUtils.stripNonDoubleChars(valueToConvert)); + } +} Added: trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/PZConvertException.java =================================================================== --- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/PZConvertException.java (rev 0) +++ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/PZConvertException.java 2006-11-11 20:42:15 UTC (rev 174) @@ -0,0 +1,39 @@ +package net.sf.pzfilereader.converter; + +/** + * Exception thrown when a conversion error occurs + * + * @author Paul Zepernick + */ +public class PZConvertException extends RuntimeException{ + private static final long serialVersionUID = 1L; + + /** + * + */ + public PZConvertException() { + } + + /** + * @param message + */ + public PZConvertException(final String message) { + super(message); + } + + /** + * @param cause + */ + public PZConvertException(final Throwable cause) { + super(cause); + } + + /** + * @param message + * @param cause + */ + public PZConvertException(final String message, final Throwable cause) { + super(message, cause); + } + +} Added: trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/PZConverter.java =================================================================== --- trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/PZConverter.java (rev 0) +++ trunk/PZFileReader/src/main/java/net/sf/pzfilereader/converter/PZConverter.java 2006-11-11 20:42:15 UTC (rev 174) @@ -0,0 +1,51 @@ +/* + * ObjectLab, http://www.objectlab.co.uk/open is supporting PZFileReader. + * + * 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.pzfilereader.converter; + +/** + * Responsible for converting a column in IDataSet + * to the desired Object. + * + * @author Paul Zepernick + */ +public interface PZConverter { + + /** + * Returns the converted object from the + * column in IDataSet + * + * @param valueToConvert + * @return Object + */ + Object convertValue(String valueToConvert); +} Added: trunk/PZFileReader/src/main/java/pzconvert.properties =================================================================== --- trunk/PZFileReader/src/main/java/pzconvert.properties (rev 0) +++ trunk/PZFileReader/src/main/java/pzconvert.properties 2006-11-11 20:42:15 UTC (rev 174) @@ -0,0 +1 @@ +java.math.BigDecimal=net.sf.pzfilereader.converter.ConvertBigInt \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |