package com.dgex.offspring.trader.assets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import nxt.Asset;
import nxt.util.Convert;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import com.dgex.offspring.config.CompareMe;
import com.dgex.offspring.nxtCore.service.INxtService;
import com.dgex.offspring.swt.table.GenerericTableViewer;
import com.dgex.offspring.swt.table.GenericComparator;
import com.dgex.offspring.swt.table.GenericTableColumnBuilder;
import com.dgex.offspring.swt.table.ICellActivateHandler;
import com.dgex.offspring.swt.table.ICellDataProvider;
import com.dgex.offspring.swt.table.IFilteredStructuredContentProvider;
import com.dgex.offspring.swt.table.IGenericTable;
import com.dgex.offspring.swt.table.IGenericTableColumn;
import com.dgex.offspring.swt.table.Wildcard;
public class AssetsViewer extends GenerericTableViewer {
static String EXTENT_COLUMN_NAME = "01234567890";
static String EXTENT_COLUMN_ISSUER = "#############";
static String EXTENT_COLUMN_QUANTITY = "1000000000";
final IGenericTableColumn columnName = new GenericTableColumnBuilder("Name")
.align(SWT.LEFT).textExtent(EXTENT_COLUMN_NAME)
.provider(new ICellDataProvider() {
@Override
public Object getCellValue(Object element) {
Asset asset = (Asset) element;
return asset.getName();
}
@Override
public void getCellData(Object element, Object[] data) {
data[ICellDataProvider.TEXT] = getCellValue(element);
}
@Override
public int compare(Object v1, Object v2) {
return ((String) v1).compareToIgnoreCase((String) v2);
// return CompareMe.compare((String) v1, (String) v2);
}
}).build();
final IGenericTableColumn columnIssuer = new GenericTableColumnBuilder(
"Issuer").align(SWT.LEFT).textExtent(EXTENT_COLUMN_ISSUER)
.activate(new ICellActivateHandler() {
@Override
public void activate(Object element) {
Asset asset = (Asset) element;
Long id = asset.getAccountId();
if (id != null) {
// InspectAccountDialog.show(id, nxt, engine, userService, sync,
// contactsService);
}
}
}).provider(new ICellDataProvider() {
@Override
public Object getCellValue(Object element) {
Asset asset = (Asset) element;
return asset.getAccountId(); // Long
}
@Override
public void getCellData(Object element, Object[] data) {
data[ICellDataProvider.TEXT] = Convert
.toUnsignedLong((Long) getCellValue(element));
}
@Override
public int compare(Object v1, Object v2) {
return CompareMe.compare((Long) v1, (Long) v2);
}
}).build();
final IGenericTableColumn columnQuantity = new GenericTableColumnBuilder(
"Quantity").align(SWT.RIGHT).textExtent(EXTENT_COLUMN_QUANTITY)
.provider(new ICellDataProvider() {
@Override
public Object getCellValue(Object element) {
Asset asset = (Asset) element;
return Integer.valueOf(asset.getQuantity());
}
@Override
public void getCellData(Object element, Object[] data) {
data[ICellDataProvider.TEXT] = Integer
.toString((Integer) getCellValue(element));
}
@Override
public int compare(Object v1, Object v2) {
return CompareMe.compare((Integer) v1, (Integer) v2);
}
}).build();
final IFilteredStructuredContentProvider contentProvider = new IFilteredStructuredContentProvider() {
private AssetsViewer viewer = null;
private String filter = null;
@Override
public void dispose() {}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.viewer = (AssetsViewer) viewer;
}
@Override
public Object[] getElements(Object inputElement) {
if (viewer == null)
return new Object[0];
List<Asset> list = new ArrayList<Asset>(Asset.getAllAssets());
Collections.sort(list, new Comparator<Asset>() {
@Override
public int compare(Asset s1, Asset s2) {
return s1.getName().compareToIgnoreCase(s2.getName());
}
});
if (filter != null) {
List<Asset> filtered = new ArrayList<Asset>();
for (Asset asset : list) {
if (Wildcard.match(asset.getName().toLowerCase(), filter)) {
filtered.add(asset);
}
}
list = filtered;
}
return list.toArray(new Object[list.size()]);
}
@Override
public void setFilter(String columnId, String filter) {
if (filter != null)
this.filter = filter.toLowerCase();
else
this.filter = null;
}
};
public INxtService nxt;
public AssetsViewer(Composite parent, INxtService nxt) {
super(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE
| SWT.BORDER);
this.nxt = nxt;
setGenericTable(new IGenericTable() {
@Override
public int getDefaultSortDirection() {
return GenericComparator.ASSCENDING;
}
@Override
public IGenericTableColumn getDefaultSortColumn() {
return columnName;
}
@Override
public IStructuredContentProvider getContentProvider() {
return contentProvider;
}
@Override
public IGenericTableColumn[] getColumns() {
return new IGenericTableColumn[] { columnName, columnQuantity };
}
});
refresh();
}
}