1 package com.opencsv.bean; 2 3 /* 4 * Copyright 2005 Bytecode Pty Ltd. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 import com.opencsv.CSVReader; 20 import com.opencsv.ICSVParser; 21 import org.apache.commons.lang3.ObjectUtils; 22 23 import java.util.Locale; 24 import java.util.ResourceBundle; 25 26 /** 27 * Builder for creating an IterableCSVToBean. 28 * This should be the preferred method of creating an IterableCSVToBean to keep 29 * the number of constructors to a minimum. 30 * 31 * <pre> 32 * {@code 33 * IterableCSVToBean bean = 34 * new IterableCSVToBean() 35 * .withReader(csvReader) 36 * .withMapper(mappingStrategy) 37 * .withFilter(csvToBeanFilter) 38 * .build(); 39 * } 40 * </pre> 41 * 42 * @see IterableCSVToBean 43 * 44 * @param <T> Type of the bean to be iterated over 45 * @deprecated Use {@link CsvToBeanBuilder} instead, then call 46 * {@link CsvToBean#iterator() } on the result 47 */ 48 @Deprecated 49 public class IterableCSVToBeanBuilder<T> { 50 51 private MappingStrategy<T> mapper; 52 private CSVReader csvReader; 53 private CsvToBeanFilter filter; 54 private Locale errorLocale = Locale.getDefault(); 55 56 /** 57 * Default constructor. 58 */ 59 public IterableCSVToBeanBuilder() { 60 } 61 62 /** 63 * Creates the IterableCSVToBean. 64 * 65 * Will throw a runtime exception if the MappingStrategy or CSVReader is not set. 66 * 67 * @return An instance of IterableCSVToBean 68 */ 69 public IterableCSVToBean<T> build() { 70 if (mapper == null) { 71 throw new RuntimeException(ResourceBundle.getBundle(ICSVParser.DEFAULT_BUNDLE_NAME, errorLocale).getString("strategy.undefined")); 72 } 73 if (csvReader == null) { 74 throw new RuntimeException(ResourceBundle.getBundle(ICSVParser.DEFAULT_BUNDLE_NAME, errorLocale).getString("csvreader.null")); 75 } 76 IterableCSVToBean<T> result = new IterableCSVToBean<>(csvReader, mapper, filter); 77 result.setErrorLocale(errorLocale); 78 return result; 79 } 80 81 /** 82 * Sets the MappingStrategy to be used by the builder. 83 * 84 * @param mappingStrategy An object that implements 85 * {@link com.opencsv.bean.MappingStrategy} 86 * @return The builder with the MappingStrategy set 87 */ 88 public IterableCSVToBeanBuilder<T> withMapper(final MappingStrategy<T> mappingStrategy) { 89 this.mapper = mappingStrategy; 90 return this; 91 } 92 93 /** 94 * Sets the reader to be used by the builder. 95 * @param reader CSVReader to be incorporated in the builder. 96 * @return The builder with the CSVReader set 97 */ 98 public IterableCSVToBeanBuilder<T> withReader(final CSVReader reader) { 99 this.csvReader = reader; 100 return this; 101 } 102 103 /** 104 * Used by unit tests. 105 * @return The MappingStrategy to be used by the builder. 106 */ 107 protected MappingStrategy<T> getStrategy() { 108 return mapper; 109 } 110 111 /** 112 * Used by unit tests. 113 * @return The csvReader to be used by the builder. 114 */ 115 protected CSVReader getCsvReader() { 116 return csvReader; 117 } 118 119 /** 120 * Used by unit tests. 121 * 122 * @return Filter to be used by the builder. 123 */ 124 protected Object getFilter() { 125 return filter; 126 } 127 128 /** 129 * Sets the filter used to remove unwanted data from the CSV file. 130 * 131 * @param filter An object implementing CsvToBeanFilter 132 * @return The builder with the filter set 133 */ 134 public IterableCSVToBeanBuilder<T> withFilter(final CsvToBeanFilter filter) { 135 this.filter = filter; 136 return this; 137 } 138 139 /** 140 * Sets the locale for all error messages. 141 * @param errorLocale The locale to be used for all error messages. If null, 142 * the default locale is used. 143 * @return this 144 * @since 4.0 145 */ 146 public IterableCSVToBeanBuilder<T> withErrorLocale(Locale errorLocale) { 147 this.errorLocale = ObjectUtils.defaultIfNull(errorLocale, Locale.getDefault()); 148 return this; 149 } 150 }