/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.flatpack; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.AbstractList; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import net.sf.flatpack.DataSet; import net.sf.flatpack.Record; import net.sf.flatpack.ordering.OrderBy; /** * The {@link DataSetList} wraps the {@link DataSet} as a Java {@link List} type so the data can easily be iterated. * You can access the {@link DataSet} API from this {@link DataSetList} as it implements {@link DataSet}. */ public class DataSetList extends AbstractList<Map<String, Object>> implements DataSet { private final DataSet dataSet; public DataSetList(DataSet dataSet) { this.dataSet = dataSet; } public Map<String, Object> get(int index) { dataSet.absolute(index); return FlatpackConverter.toMap(dataSet); } public int size() { return dataSet.getRowCount(); } @Override public Iterator<Map<String, Object>> iterator() { dataSet.goTop(); return new Iterator<Map<String, Object>>() { private boolean hasNext = dataSet.next(); public boolean hasNext() { return hasNext; } public Map<String, Object> next() { // because of a limitation in split() we need to create an object for the current position // otherwise strangeness occurs when the same object is used to represent each row Map<String, Object> result = FlatpackConverter.toMap(dataSet); hasNext = dataSet.next(); return result; } public void remove() { throw new UnsupportedOperationException("remove() not supported"); } }; } // delegate methods // -------------------------------------------------------------- @Override public void goTop() { dataSet.goTop(); } @Override public void goBottom() { dataSet.goBottom(); } @Override public boolean previous() { return dataSet.previous(); } @Override public List getErrors() { return dataSet.getErrors(); } @Override public void remove() { dataSet.remove(); } @Override public int getIndex() { return dataSet.getIndex(); } @Override public int getRowCount() { return dataSet.getRowCount(); } @Override public int getErrorCount() { return dataSet.getErrorCount(); } @Override public boolean isAnError(int lineNo) { return dataSet.isAnError(lineNo); } @Override public void orderRows(OrderBy ob) { dataSet.orderRows(ob); } @Override public void setLowerCase() { dataSet.setLowerCase(); } @Override public void setUpperCase() { dataSet.setUpperCase(); } @Override public void absolute(int localPointer) { dataSet.absolute(localPointer); } @Override public void setStrictNumericParse(boolean strictNumericParse) { dataSet.setStrictNumericParse(strictNumericParse); } @Override public void setPZConvertProps(Properties props) { dataSet.setPZConvertProps(props); } @Override public void setValue(String column, String value) { dataSet.setValue(column, value); } @Override public void clearRows() { dataSet.clearRows(); } @Override public void clearErrors() { dataSet.clearErrors(); } @Override public void clearAll() { dataSet.clearAll(); } @Override public String getString(String column) { return dataSet.getString(column); } @Override public double getDouble(String column) { return dataSet.getDouble(column); } @Override public BigDecimal getBigDecimal(String column) { return dataSet.getBigDecimal(column); } @Override public int getInt(String column) { return dataSet.getInt(column); } @Override public long getLong(String column) { return dataSet.getLong(column); } @Override public Date getDate(String column) throws ParseException { return dataSet.getDate(column); } @Override public Date getDate(String column, SimpleDateFormat sdf) throws ParseException { return dataSet.getDate(column, sdf); } @Override public Object getObject(String column, Class<?> classToConvertTo) { return dataSet.getObject(column, classToConvertTo); } @Override public String[] getColumns() { return dataSet.getColumns(); } @Override public String[] getColumns(String recordID) { return dataSet.getColumns(recordID); } @Override public int getRowNo() { return dataSet.getRowNo(); } @Override public boolean isRecordID(String recordID) { return dataSet.isRecordID(recordID); } @Override public boolean contains(String column) { return dataSet.contains(column); } @Override public boolean isRowEmpty() { return dataSet.isRowEmpty(); } @Override public String getRawData() { return dataSet.getRawData(); } @Override public boolean next() { return dataSet.next(); } @Override public Record getRecord() { return dataSet.getRecord(); } }