OPEN - issue BATCH-371: FlatFileItemWriter no longer uses LineAggregator

http://jira.springframework.org/browse/BATCH-371

Changed the interface of LineAggregator for symmetry with LineTokenizer.
This commit is contained in:
dsyer
2008-02-20 08:55:35 +00:00
parent 2d9a4fb570
commit f6bd90fc3e
12 changed files with 116 additions and 89 deletions

View File

@@ -21,6 +21,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.batch.io.file.mapping.DefaultFieldSet;
import org.springframework.batch.io.file.mapping.FieldSet;
import org.springframework.batch.io.file.transform.LineAggregator;
import org.springframework.batch.item.writer.ItemTransformer;
import org.springframework.batch.sample.domain.Address;
@@ -29,89 +31,94 @@ import org.springframework.batch.sample.domain.Customer;
import org.springframework.batch.sample.domain.LineItem;
import org.springframework.batch.sample.domain.Order;
/**
* Converts <code>Order</code> object to a String.
* @author Dave Syer
*/
public class OrderTransformer implements ItemTransformer {
/**
* Aggregators for all types of lines in the output file
*/
private Map aggregators;
/**
* Aggregators for all types of lines in the output file
*/
private Map aggregators;
/**
* Converts information from an Order object to a collection of Strings for output.
*/
public Object transform(Object data) {
Order order = (Order) data;
List result = new ArrayList();
/**
* Converts information from an Order object to a collection of Strings for
* output.
*/
public Object transform(Object data) {
Order order = (Order) data;
result.add(getAggregator("header").aggregate(OrderFormatterUtils.headerArgs(order)));
result.add(getAggregator("customer").aggregate(OrderFormatterUtils.customerArgs(order)));
result.add(getAggregator("address").aggregate(OrderFormatterUtils.billingAddressArgs(order)));
result.add(getAggregator("billing").aggregate(OrderFormatterUtils.billingInfoArgs(order)));
List result = new ArrayList();
List items = order.getLineItems();
LineItem item;
result.add(getAggregator("header").aggregate(OrderFormatterUtils.headerArgs(order)));
result.add(getAggregator("customer").aggregate(OrderFormatterUtils.customerArgs(order)));
result.add(getAggregator("address").aggregate(OrderFormatterUtils.billingAddressArgs(order)));
result.add(getAggregator("billing").aggregate(OrderFormatterUtils.billingInfoArgs(order)));
for (int i = 0; i < items.size(); i++) {
item = (LineItem) items.get(i);
result.add(getAggregator("item").aggregate(OrderFormatterUtils.lineItemArgs(item)));
}
List items = order.getLineItems();
LineItem item;
result.add(getAggregator("footer").aggregate(OrderFormatterUtils.footerArgs(order)));
return result;
}
public void setAggregators(Map aggregators) {
this.aggregators = aggregators;
}
private LineAggregator getAggregator(String name) {
for (int i = 0; i < items.size(); i++) {
item = (LineItem) items.get(i);
result.add(getAggregator("item").aggregate(OrderFormatterUtils.lineItemArgs(item)));
}
result.add(getAggregator("footer").aggregate(OrderFormatterUtils.footerArgs(order)));
return result;
}
public void setAggregators(Map aggregators) {
this.aggregators = aggregators;
}
private LineAggregator getAggregator(String name) {
return (LineAggregator) aggregators.get(name);
}
/**
* Utility class encapsulating formatting of <code>Order</code> and its nested objects.
*/
/**
* Utility class encapsulating formatting of <code>Order</code> and its
* nested objects.
*/
private static class OrderFormatterUtils {
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
static String[] headerArgs(Order order) {
return new String[] { "BEGIN_ORDER:", String.valueOf(order.getOrderId()), dateFormat.format(order.getOrderDate()) };
static FieldSet headerArgs(Order order) {
return new DefaultFieldSet(new String[] { "BEGIN_ORDER:", String.valueOf(order.getOrderId()),
dateFormat.format(order.getOrderDate()) });
}
static String[] footerArgs(Order order) {
return new String[] { "END_ORDER:", order.getTotalPrice().toString() };
static FieldSet footerArgs(Order order) {
return new DefaultFieldSet(new String[] { "END_ORDER:", order.getTotalPrice().toString() });
}
static String[] customerArgs(Order order) {
static FieldSet customerArgs(Order order) {
Customer customer = order.getCustomer();
return new String[] { "CUSTOMER:", String.valueOf(customer.getRegistrationId()), customer.getFirstName(),
customer.getMiddleName(), customer.getLastName() };
return new DefaultFieldSet(new String[] { "CUSTOMER:", String.valueOf(customer.getRegistrationId()),
customer.getFirstName(), customer.getMiddleName(), customer.getLastName() });
}
static String[] lineItemArgs(LineItem item) {
return new String[] { "ITEM:", String.valueOf(item.getItemId()), item.getPrice().toString() };
static FieldSet lineItemArgs(LineItem item) {
return new DefaultFieldSet(new String[] { "ITEM:", String.valueOf(item.getItemId()),
item.getPrice().toString() });
}
static String[] billingAddressArgs(Order order) {
static FieldSet billingAddressArgs(Order order) {
Address address = order.getBillingAddress();
return new String[] { "ADDRESS:", address.getAddrLine1(), address.getCity(), address.getZipCode() };
return new DefaultFieldSet(new String[] { "ADDRESS:", address.getAddrLine1(), address.getCity(),
address.getZipCode() });
}
static String[] billingInfoArgs(Order order) {
static FieldSet billingInfoArgs(Order order) {
BillingInfo billingInfo = order.getBilling();
return new String[] { "BILLING:", billingInfo.getPaymentId(), billingInfo.getPaymentDesc() };
return new DefaultFieldSet(new String[] { "BILLING:", billingInfo.getPaymentId(),
billingInfo.getPaymentDesc() });
}
}
}