Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
flex.messaging.io.ASRecordSet Maven / Gradle / Ivy
Go to download
Amf deserializer used by ats-core component to share data
/*
* www.openamf.org
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package flex.messaging.io;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;
/**
* @author Jason Calabrese [email protected]
* @version $Revision: 1.29 $, $Date: 2006/03/25 22:17:44 $
*/
public class ASRecordSet extends ASObject {
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(ASRecordSet.class);
public static final String SERVICE_NAME = "OpenAMFPageableRecordSet";
private static final String SI = "serverInfo";
private static final String SI_ID = "id";
private static final String SI_TOTAL_COUNT = "totalCount";
private static final String SI_INITIAL_DATA = "initialData";
//private static final String SI_ROWS = "rows";
private static final String SI_CURSOR = "cursor";
private static final String SI_SERVICE_NAME = "serviceName";
private static final String SI_COLUMN_NAMES = "columnNames";
private static final String SI_VERSION = "version";
private static int count = 0;
private Map serverInfo;
private List> rows;
private int initialRowCount;
public ASRecordSet() {
super("RecordSet");
serverInfo = new HashMap();
put(SI, serverInfo);
synchronized (ASRecordSet.class)
{
count++;
setId("RS" + count);
}
setInitialData(new ArrayList());
setServiceName(SERVICE_NAME);
setCursor(1);
setVersion(1);
rows = new ArrayList>();
initialRowCount = 0;
}
public String getId() {
return (String) serverInfo.get(SI_ID);
}
public void setId(String id) {
serverInfo.put(SI_ID, id);
}
public int getTotalCount() {
Object value = serverInfo.get(SI_TOTAL_COUNT);
if (value != null)
return ((Integer) value).intValue();
return 0;
}
public void setTotalCount(int totalCount) {
serverInfo.put(SI_TOTAL_COUNT, Integer.valueOf(totalCount));
}
public List> getInitialData() {
return (List>)serverInfo.get(SI_INITIAL_DATA);
}
public void setInitialData(List> initialData) {
serverInfo.put(SI_INITIAL_DATA, initialData);
}
public Map getRecords(int from, int count) {
List> page = rows.subList(from - 1, from - 1 + count);
Map records = new HashMap();
records.put("Page", page);
records.put("Cursor", Integer.valueOf(from + 1));
return records;
}
public int getCursor() {
Object value = serverInfo.get(SI_CURSOR);
if (value != null)
return ((Integer) value).intValue();
return 0;
}
public void setCursor(int cursor) {
serverInfo.put(SI_CURSOR, Integer.valueOf(cursor));
}
public String getServiceName() {
return (String) serverInfo.get(SI_SERVICE_NAME);
}
public void setServiceName(String serviceName) {
serverInfo.put(SI_SERVICE_NAME, serviceName);
}
public String[] getColumnNames() {
return (String[]) serverInfo.get(SI_COLUMN_NAMES);
}
public void setColumnNames(String[] columnNames) {
serverInfo.put(SI_COLUMN_NAMES, columnNames);
}
public double getVersion() {
Object value = serverInfo.get(SI_VERSION);
if (value != null)
return ((Double) value).doubleValue();
return 0;
}
public void setVersion(double version) {
serverInfo.put(SI_VERSION, Double.valueOf(version));
}
public List> rows() {
return rows;
}
public void populate(ResultSet rs) throws IOException {
try {
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
String[] columnNames = new String[columnCount];
int rowIndex = 0;
List> initialData = new ArrayList>();
while (rs.next()) {
rowIndex++;
List row = new ArrayList();
for (int column = 0; column < columnCount; column++) {
if (rowIndex == 1) {
columnNames[column] = rsmd.getColumnName(column + 1);
}
row.add(rs.getObject(column + 1));
}
if (rowIndex == 1) {
setColumnNames(columnNames);
}
rows.add(row);
if (rowIndex <= initialRowCount) {
initialData.add(row);
}
}
setTotalCount(rowIndex);
setInitialData(initialData);
setColumnNames(columnNames);
} catch (SQLException e) {
throw new IOException(e.getMessage());
}
}
public void populate(String[] columnNames, List> rows) {
this.rows = rows;
List> initialData =
rows.subList(
0,
(initialRowCount > rows.size()
? rows.size()
: initialRowCount)); // NOTE: sublist semantics are [fromIndex, toIndex]
setInitialData(initialData);
setTotalCount(rows.size());
setColumnNames(columnNames);
}
public void populate(List> list, String[] ignoreProperties)
throws
IllegalArgumentException,
IllegalAccessException,
InvocationTargetException {
List names = new ArrayList ();
Object firstBean = list.get(0);
PropertyDescriptor[] properties =
PropertyUtils.getPropertyDescriptors(firstBean);
for (int i = 0; i < properties.length; i++) {
PropertyDescriptor descriptor = properties[i];
if (!ignoreProperty(descriptor, ignoreProperties)) {
names.add(descriptor.getDisplayName());
}
}
String[] columnNames = new String[names.size()];
columnNames = names.toArray(columnNames);
setColumnNames(columnNames);
int rowIndex = 0;
List> initialData = new ArrayList>();
Iterator> iterator = list.iterator();
while (iterator.hasNext()) {
rowIndex++;
Object bean = iterator.next();
List row = new ArrayList();
for (int i = 0; i < properties.length; i++) {
PropertyDescriptor descriptor = properties[i];
if (!ignoreProperty(descriptor, ignoreProperties)) {
Object value = null;
Method readMethod = descriptor.getReadMethod();
if (readMethod != null) {
value = readMethod.invoke(bean, new Object[0]);
}
row.add(value);
}
}
rows.add(row);
if (rowIndex <= initialRowCount) {
initialData.add(row);
}
}
setInitialData(initialData);
setTotalCount(rows.size());
log.debug(this);
}
private boolean ignoreProperty(
PropertyDescriptor descriptor,
String[] ignoreProperties) {
boolean ignore = false;
if (descriptor.getName().equals("class")) {
ignore = true;
} else {
for (int i = 0; i < ignoreProperties.length; i++) {
String ignoreProp = ignoreProperties[i];
if (ignoreProp.equals(descriptor.getName())) {
log.debug("Ignoring " + descriptor.getName());
ignore = true;
break;
}
}
}
return ignore;
}
@Override
public String toString() {
StringBuffer info = new StringBuffer();
addInfo(info, SI_ID, getId());
addInfo(info, SI_TOTAL_COUNT, getTotalCount());
addInfo(info, SI_CURSOR, getCursor());
addInfo(info, SI_SERVICE_NAME, getServiceName());
addInfo(info, SI_VERSION, getVersion());
StringBuffer names = new StringBuffer();
String[] columnNames = getColumnNames();
if (columnNames != null) {
for (int i = 0; i < columnNames.length; i++) {
String name = columnNames[i];
if (i > 0) {
names.append(", ");
}
names.append(name);
}
}
addInfo(info, SI_COLUMN_NAMES, names);
addInfo(info, SI_INITIAL_DATA, getInitialData().toString());
return info.toString();
}
private void addInfo(StringBuffer info, String name, int value) {
addInfo(info, name, Integer.valueOf(value));
}
private void addInfo(StringBuffer info, String name, double value) {
addInfo(info, name, Double.valueOf(value));
}
private void addInfo(StringBuffer info, String name, Object value) {
info.append(name);
info.append(" = ");
info.append(value);
info.append('\n');
}
}