org.csveed.bean.AbstractMapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of csveed Show documentation
Show all versions of csveed Show documentation
Java toolkit for mapping CSV-to-Bean mapping and vice versa. Redirection to Introduction in 5 seconds!
/*
* CSVeed (https://github.com/42BV/CSVeed)
*
* Copyright 2013-2023 CSVeed.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of The Apache Software License,
* Version 2.0 which accompanies this distribution, and is available at
* https://www.apache.org/licenses/LICENSE-2.0.txt
*/
package org.csveed.bean;
import java.util.Set;
import org.csveed.api.Header;
import org.csveed.api.Row;
import org.csveed.bean.conversion.BeanWrapper;
import org.csveed.bean.conversion.ConversionException;
import org.csveed.bean.conversion.DefaultConverters;
import org.csveed.common.Column;
import org.csveed.report.CsvException;
import org.csveed.report.RowError;
/**
* The Class AbstractMapper.
*
* @param
* the generic type
*/
public abstract class AbstractMapper {
/** The bean instructions. */
protected BeanInstructions beanInstructions;
/** The verified. */
private boolean verified;
/** The default converters. */
private DefaultConverters defaultConverters = new DefaultConverters();
/**
* Gets the bean property.
*
* @param currentColumn
* the current column
*
* @return the bean property
*/
public abstract BeanProperty getBeanProperty(Column currentColumn);
/**
* Keys.
*
* @return the sets the
*/
protected abstract Set keys();
/**
* Check key.
*
* @param header
* the header
* @param key
* the key
*/
protected abstract void checkKey(Header header, Column key);
/**
* Verify header.
*
* @param header
* the header
*/
public void verifyHeader(Header header) {
if (verified) {
return;
}
for (Column key : keys()) {
if (!getBeanProperty(key).isDynamicColumnProperty()) {
checkKey(header, key);
}
}
verified = true;
}
/**
* Gets the column.
*
* @param row
* the row
*
* @return the column
*/
protected abstract Column getColumn(Row row);
/**
* Convert.
*
* @param bean
* the bean
* @param row
* the row
* @param lineNumber
* the line number
* @param currentDynamicColumn
* the current dynamic column
*
* @return the t
*/
public T convert(T bean, Row row, int lineNumber, DynamicColumn currentDynamicColumn) {
BeanWrapper beanWrapper = new BeanWrapper(defaultConverters, bean);
Column currentColumn = null;
for (String cell : row) {
currentColumn = currentColumn == null ? getColumn(row) : currentColumn.nextColumn();
if (currentDynamicColumn.isDynamicColumnActive(currentColumn)) {
setDynamicColumnProperties(row, lineNumber, beanWrapper, currentColumn);
continue;
}
BeanProperty beanProperty = getBeanProperty(currentColumn);
if (beanProperty == null) {
continue;
}
if (beanProperty.isRequired() && (cell == null || cell.equals(""))) {
throw new CsvException(new RowError(
"Bean property \"" + beanProperty.getPropertyName()
+ "\" is required and may not be empty or null",
row.reportOnColumn(currentColumn.getColumnIndex()), lineNumber));
}
setBeanProperty(row, lineNumber, beanWrapper, currentColumn, cell, beanProperty);
}
return bean;
}
/**
* Sets the dynamic column properties.
*
* @param row
* the row
* @param lineNumber
* the line number
* @param beanWrapper
* the bean wrapper
* @param currentColumn
* the current column
*/
private void setDynamicColumnProperties(Row row, int lineNumber, BeanWrapper beanWrapper, Column currentColumn) {
BeanProperty headerNameProperty = beanInstructions.getProperties().getHeaderNameProperty();
if (headerNameProperty != null) {
String dynamicHeaderName = row.getHeader().getName(currentColumn.getColumnIndex());
setBeanProperty(row, lineNumber, beanWrapper, currentColumn, dynamicHeaderName, headerNameProperty);
}
BeanProperty headerValueProperty = beanInstructions.getProperties().getHeaderValueProperty();
if (headerValueProperty != null) {
String dynamicHeaderValue = row.get(currentColumn.getColumnIndex());
setBeanProperty(row, lineNumber, beanWrapper, currentColumn, dynamicHeaderValue, headerValueProperty);
}
}
/**
* Sets the bean property.
*
* @param row
* the row
* @param lineNumber
* the line number
* @param beanWrapper
* the bean wrapper
* @param currentColumn
* the current column
* @param cell
* the cell
* @param beanProperty
* the bean property
*/
private void setBeanProperty(Row row, int lineNumber, BeanWrapper beanWrapper, Column currentColumn, String cell,
BeanProperty beanProperty) {
try {
beanWrapper.setProperty(beanProperty, cell);
} catch (ConversionException err) {
String message = err.getMessage() + " cell" + currentColumn.getColumnText() + " [" + cell + "] to "
+ beanProperty.getPropertyName() + ": " + err.getTypeDescription();
throw new CsvException(
new RowError(message, row.reportOnColumn(currentColumn.getColumnIndex()), lineNumber));
}
}
/**
* Sets the bean instructions.
*
* @param beanInstructions
* the new bean instructions
*/
public void setBeanInstructions(BeanInstructions beanInstructions) {
this.beanInstructions = beanInstructions;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy