View Javadoc

1   /***
2    * Copyright (C) 2008 rweber <quietgenie@users.sourceforge.net>
3    * 
4    * This file is part of CsvObjectMapper.
5    * 
6    * CsvObjectMapper is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Lesser General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   * 
11   * CsvObjectMapper is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Lesser General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Lesser General Public License
17   * along with CsvObjectMapper.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  
20  /***
21   * 
22   */
23  package com.projectnine.csvmapper;
24  
25  import java.util.List;
26  import java.util.Map;
27  
28  import org.apache.commons.logging.Log;
29  import org.apache.commons.logging.LogFactory;
30  
31  /***
32   * This class is a simple construct for holding a {@link List} of
33   * {@link CsvFieldMapping}s and generating new instances of the Class that the
34   * CSV record is declared to represent.
35   * 
36   * @author robweber
37   * 
38   */
39  public class CsvMappingDefinition {
40      private static final Log log = LogFactory
41  	    .getLog(CsvMappingDefinition.class);
42  
43      /***
44       * The name of the class into which the CSV record will be transformed.
45       */
46      private String beanClassName;
47  
48      /***
49       * The number of fields that we expect to find in the CSV record. Leave this
50       * value alone if you don't care how many fields there are.
51       */
52      private int expectedNumberOfFields = -1;
53  
54      /***
55       * A list of the {@link CsvFieldMapping}s.
56       */
57      private List<CsvFieldMapping> fieldMappings;
58  
59      /***
60       * How should the generated object be represented in JEXL expressions
61       * (Object to CSV only). Defaults to "generatedObject".
62       */
63      private String beanVariableName = "generatedObject";
64  
65      /***
66       * Should any expressions be evaluated before the Object is converted to
67       * CSV?
68       */
69      private Map<String, String> extendedContext;
70  
71      /***
72       * Get a new instance of the Class represented by {@link #beanClassName}.
73       * This method assumes that the default constructor is defined for the class
74       * represented by {@link #beanClassName}.
75       * 
76       * @return
77       */
78      public Object getNewBeanInstance() {
79  	Object newBeanInstance = null;
80  	try {
81  	    newBeanInstance = Class.forName(beanClassName).newInstance();
82  	} catch (ClassNotFoundException e) {
83  	    log.warn("The specified bean class name, " + beanClassName
84  		    + ", is not on the classpath. Returning null.", e);
85  	} catch (InstantiationException e) {
86  	    log.warn("An error occurred while instantiating " + beanClassName
87  		    + ". Returning null.", e);
88  	} catch (IllegalAccessException e) {
89  	    log.warn("No access to the constructor of " + beanClassName + ".",
90  		    e);
91  	}
92  
93  	return newBeanInstance;
94      }
95  
96      /***
97       * Get the list of {@link CsvFieldMapping}s.
98       * 
99       * @return
100      */
101     public List<CsvFieldMapping> getFieldMappings() {
102 	return fieldMappings;
103     }
104 
105     /***
106      * @param fieldMappings
107      *            the fieldMappings to set
108      */
109     public void setFieldMappings(List<CsvFieldMapping> fieldMappings) {
110 	this.fieldMappings = fieldMappings;
111     }
112 
113     /***
114      * @param beanClassName
115      *            the beanClassName to set
116      */
117     public void setBeanClassName(String beanClassName) {
118 	this.beanClassName = beanClassName;
119     }
120 
121     /***
122      * @param expectedNumberOfFields
123      *            the expectedNumberOfFields to set
124      */
125     public void setExpectedNumberOfFields(int expectedNumberOfFields) {
126 	this.expectedNumberOfFields = expectedNumberOfFields;
127     }
128 
129     /***
130      * @return the expectedNumberOfFields
131      */
132     public int getExpectedNumberOfFields() {
133 	return expectedNumberOfFields;
134     }
135 
136     /***
137      * @return the beanVariableName
138      */
139     public String getBeanVariableName() {
140 	return beanVariableName;
141     }
142 
143     /***
144      * @param beanVariableName
145      *            the beanVariableName to set
146      */
147     public void setBeanVariableName(String beanVariableName) {
148 	this.beanVariableName = beanVariableName;
149     }
150 
151     /***
152      * @return the perLinePreProcessingInstructions
153      */
154     public Map<String, String> getExtendedContext() {
155 	return extendedContext;
156     }
157 
158     /***
159      * @param perLinePreProcessingInstructions
160      *            the perLinePreProcessingInstructions to set
161      */
162     public void setExtendedContext(Map<String, String> extendedContext) {
163 	this.extendedContext = extendedContext;
164     }
165 }