diff --git a/common/source/java/ch/systemsx/cisd/common/parser/DefaultLineTokenizer.java b/common/source/java/ch/systemsx/cisd/common/parser/DefaultLineTokenizer.java index d1fb1446a00994a8cb75fe5dc77847d7e6d71d52..3110a359c1c512fe5f012ca9417b745dc2b7642e 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/DefaultLineTokenizer.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/DefaultLineTokenizer.java @@ -8,7 +8,7 @@ import org.apache.commons.lang.text.StrTokenizer; /** * A default <code>ILineTokenizer</code> implementation that parses a line into an array of <code>String</code> - * objects. + * objects. This implementation uses {@link StrTokenizer} as internal worker. * <p> * The default separator chars used here are <code>\t</code>. If you want to change that, use * {@link #setProperty(PropertyKey, String)} with corresponding property key defined here. diff --git a/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java b/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java index 6e0d184ba265d21a2fa4dd03e5dacdce504e6f20..89f5ce4fe160c2280d14b259c1b48ae97d2df73c 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java @@ -55,10 +55,13 @@ public class DefaultReaderParser<E> implements IReaderParser<E> private IParserObjectFactory<E> factory; - private IPropertyMapperFactory mapperFactory; - - // TODO Christian: refactor this!!! - private boolean propertyMapperSet = false; + /** + * The line where the header is. + * <p> + * If we set it bigger than <code>-1</code>, we assume that the header contains mapping informations. + * </p> + */ + private int headerLine = -1; public DefaultReaderParser() { @@ -85,6 +88,11 @@ public class DefaultReaderParser<E> implements IReaderParser<E> return lineTokenizer.tokenize(lineNumber, line); } + public final void setHeaderLine(int headerLine) + { + this.headerLine = headerLine; + } + /////////////////////////////////////////////////////// // Parser /////////////////////////////////////////////////////// @@ -114,11 +122,10 @@ public class DefaultReaderParser<E> implements IReaderParser<E> { for (int lineNumber = 0; (line = bufferedReader.readLine()) != null; lineNumber++) { - if (mapperFactory != null && mapperFactory.getHeaderLine() > -1 && propertyMapperSet == false) + if (lineNumber == headerLine) { String[] tokens = parseLine(lineNumber, line); - factory.setPropertyMapper(mapperFactory.createPropertyMapper(tokens)); - propertyMapperSet = true; + factory.setPropertyMapper(new HeaderFilePropertyMapper(tokens)); continue; } if (lineFilter.acceptLine(line)) @@ -145,9 +152,4 @@ public class DefaultReaderParser<E> implements IReaderParser<E> { this.factory = factory; } - - public final void setPropertyMapperFactory(IPropertyMapperFactory mapperFactory) - { - this.mapperFactory = mapperFactory; - } } \ No newline at end of file diff --git a/common/source/java/ch/systemsx/cisd/common/parser/HeaderFilePropertyMapper.java b/common/source/java/ch/systemsx/cisd/common/parser/HeaderFilePropertyMapper.java index 4703d0b4750f0ffd500764569bf2d6ec79086ef4..89fea568c67c55e89a5d188f47ab2a10abd8ec18 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/HeaderFilePropertyMapper.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/HeaderFilePropertyMapper.java @@ -20,35 +20,37 @@ import java.util.HashMap; import java.util.Map; /** + * A <code>IPropertyMapper</code> implementation for mapping informations being in the header of a given file. + * <p> + * The parser already parsed the header and give us a <code>String</code> array. + * </p> * - * * @author Christian Ribeaud */ -public class HeaderFilePropertyMapper implements IPropertyMapper +final class HeaderFilePropertyMapper implements IPropertyMapper { - private final Map<String, Property> properties; + private final Map<String, IPropertyModel> properties; - public HeaderFilePropertyMapper(String[] headerTokens) { + HeaderFilePropertyMapper(String[] headerTokens) { this.properties = tokensToMap(headerTokens); } - private final static Map<String, Property> tokensToMap(String[] tokens) + private final static Map<String, IPropertyModel> tokensToMap(String[] tokens) { - Map<String, Property> map = new HashMap<String, Property>(tokens.length); + Map<String, IPropertyModel> map = new HashMap<String, IPropertyModel>(tokens.length); for (int i = 0; i < tokens.length; i++) { String token = tokens[i]; - map.put(token, new Property(i, token)); + map.put(token, new MappedProperty(i, token)); } return map; } - /////////////////////////////////////////////////////// // IPropertyMapper /////////////////////////////////////////////////////// - public Property getProperty(String name) + public final IPropertyModel getProperty(String name) { return properties.get(name); } diff --git a/common/source/java/ch/systemsx/cisd/common/parser/ILineTokenizer.java b/common/source/java/ch/systemsx/cisd/common/parser/ILineTokenizer.java index 4d46852628845c5572da90c415ef262eb16a4933..f1dc5ae608a95222d83af38a9e3c758b74c64900 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/ILineTokenizer.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/ILineTokenizer.java @@ -17,8 +17,9 @@ package ch.systemsx.cisd.common.parser; /** + * A <code>ILineTokenizer</code> implementation is able to split a given <code>String</code> line in an array of + * tokens. * - * * @author Christian Ribeaud */ public interface ILineTokenizer @@ -27,17 +28,18 @@ public interface ILineTokenizer /** * Inits this <code>ILineTokenizer</code>. * <p> - * Just gets called before parsing starts. + * Should be called before parsing starts. * </p> */ public void init(); - public abstract String[] tokenize(int lineNumber, String line); + /** Splits given <code>line</code> into an array of tokens. */ + public String[] tokenize(int lineNumber, String line); /** - * Destroys resources used by this <code>IParserObjectFactory</code>. + * Cleans up resources used by this <code>ILineTokenizer</code>. * <p> - * Just gets called when parsing has finished. + * Should be called when parsing has finished. * </p> */ public void destroy(); diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IParserObjectFactory.java b/common/source/java/ch/systemsx/cisd/common/parser/IParserObjectFactory.java index b7ef78fdb38cfa1914fd5693b5e44ed9da80bd1b..87bb7e61e6da8007d9cb67938880eb7dcabc2db0 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/IParserObjectFactory.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/IParserObjectFactory.java @@ -17,9 +17,10 @@ package ch.systemsx.cisd.common.parser; /** - * Implementation know how to deal with given parsed text line and convert it into an appropriate <code>Object</code>. - * A <code>IParserObjectFactory</code> needs a <code>IPropertyMapper</code> to do its job. This - * <code>IPropertyMapper</code> helps to map <code>Object</code> properties to given tokens. + * A <code>IParserObjectFactory</code> implementation knows how to deal with given line tokens and convert them into + * an appropriate <code>Object</code>. A <code>IParserObjectFactory</code> needs a <code>IPropertyMapper</code> + * to perform its job. A <code>IPropertyMapper</code> helps to map passed tokens to created <code>Object</code> + * properties . * <p> * A <code>IParserObjectFactory</code> is typically registered in {@link IReaderParser}. * </p> @@ -31,7 +32,11 @@ public interface IParserObjectFactory<E> /** * This <code>IParserObjectFactory</code> implementation does nothing and returns the passed - * <code>lineTokens</code> as <code>String[]</code>. + * <code>lineTokens</code> as <code>String[]</code>. No mapping needed, so + * {@link #setPropertyMapper(IPropertyMapper)} does nothing. + * <p> + * This implementation could be used to debugging purposes. + * </p> * * @author Christian Ribeaud */ @@ -42,12 +47,12 @@ public interface IParserObjectFactory<E> // IParserObjectFactory /////////////////////////////////////////////////////// - public String[] createObject(String[] lineTokens) + public final String[] createObject(String[] lineTokens) { return lineTokens; } - public void setPropertyMapper(IPropertyMapper propertyMapper) + public final void setPropertyMapper(IPropertyMapper propertyMapper) { } }; @@ -57,5 +62,6 @@ public interface IParserObjectFactory<E> */ public E createObject(String[] lineTokens); + /** Sets a <code>IPropertyMapper</code> to map line tokens. */ public void setPropertyMapper(IPropertyMapper propertyMapper); } \ No newline at end of file diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapper.java b/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapper.java index 62dac4f5f662b5c812550e0046c839424627128f..3f5039316154c56340f223c04f91a268a43dc878 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapper.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapper.java @@ -16,48 +16,14 @@ package ch.systemsx.cisd.common.parser; -import org.apache.commons.lang.builder.ToStringBuilder; - /** + * The job of <code>PropertyMapper</code> is to return mapping informations regarding a given property name. * - * * @author Christian Ribeaud */ public interface IPropertyMapper { - - public Property getProperty(String name); - - /////////////////////////////////////////////////////// - // Helper Classes - /////////////////////////////////////////////////////// - /** - * - * - * @author Christian Ribeaud - */ - public final static class Property { - - public final int column; - - public final String name; - - protected Property(final int column, final String name) - { - this.column = column; - this.name = name; - } - - /////////////////////////////////////////////////////// - // Object - /////////////////////////////////////////////////////// - - @Override - public final String toString() - { - return ToStringBuilder.reflectionToString(this); - } - - } + /** Returns a <code>IPropertyModel</code> for a given property name. */ + public IPropertyModel getProperty(String name); } \ No newline at end of file diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapperFactory.java b/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapperFactory.java deleted file mode 100644 index 9d3a6ee5fb8b3572e90612fc064b3d98bb6774fe..0000000000000000000000000000000000000000 --- a/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapperFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2007 ETH Zuerich, CISD - * - * 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 ch.systemsx.cisd.common.parser; - -/** - * - * - * @author Christian Ribeaud - */ -// TODO Christian: actually this only can understand file with a header. We should -// be more generic. -public interface IPropertyMapperFactory -{ - public int getHeaderLine(); - - public IPropertyMapper createPropertyMapper(String[] tokens); -} diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IReaderParser.java b/common/source/java/ch/systemsx/cisd/common/parser/IReaderParser.java index 7a110b7d79c2d871fc4ad6111fdcd7466ca2001e..4133346474913bae0dd0aa727d49893ba71b5511 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/IReaderParser.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/IReaderParser.java @@ -62,6 +62,4 @@ public interface IReaderParser<E> * </p> */ public void setObjectFactory(IParserObjectFactory<E> factory); - - public void setPropertyMapperFactory(IPropertyMapperFactory factory); }