View Javadoc

1   /*
2    * Copyright 2006-2007 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springframework.batch.item.file.separator;
18  
19  
20  /**
21   * A {@link RecordSeparatorPolicy} that looks for an exact match for a String at
22   * the end of a line (e.g. a semicolon).
23   * 
24   * @author Dave Syer
25   * 
26   */
27  public class SuffixRecordSeparatorPolicy extends DefaultRecordSeparatorPolicy {
28  
29  	/**
30  	 * Default value for record terminator suffix.
31  	 */
32  	public static final String DEFAULT_SUFFIX = ";";
33  
34  	private String suffix = DEFAULT_SUFFIX;
35  
36  	private boolean ignoreWhitespace = true;
37  
38  	/**
39  	 * Lines ending in this terminator String signal the end of a record.
40  	 * 
41  	 * @param suffix
42  	 */
43  	public void setSuffix(String suffix) {
44  		this.suffix = suffix;
45  	}
46  
47  	/**
48  	 * Flag to indicate that the decision to terminate a record should ignore
49  	 * whitespace at the end of the line.
50  	 * 
51  	 * @param ignoreWhitespace
52  	 */
53  	public void setIgnoreWhitespace(boolean ignoreWhitespace) {
54  		this.ignoreWhitespace = ignoreWhitespace;
55  	}
56  
57  	/**
58  	 * Return true if the line ends with the specified substring. By default
59  	 * whitespace is trimmed before the comparison. Also returns true if the
60  	 * line is null, but not if it is empty.
61  	 * 
62  	 * @see org.springframework.batch.item.file.separator.RecordSeparatorPolicy#isEndOfRecord(java.lang.String)
63  	 */
64      @Override
65  	public boolean isEndOfRecord(String line) {
66  		if (line == null) {
67  			return true;
68  		}
69  		String trimmed = ignoreWhitespace ? line.trim() : line;
70  		return trimmed.endsWith(suffix);
71  	}
72  	
73  	/**
74  	 * Remove the suffix from the end of the record.
75  	 * 
76  	 * @see org.springframework.batch.item.file.separator.SimpleRecordSeparatorPolicy#postProcess(java.lang.String)
77  	 */
78      @Override
79  	public String postProcess(String record) {
80  		if (record==null) {
81  			return null;
82  		}
83  		return record.substring(0, record.lastIndexOf(suffix));
84  	}
85  
86  }