package com.dgex.offspring.trader.myassets;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import nxt.Asset;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.e4.ui.services.IStylingEngine;
import org.eclipse.e4.ui.workbench.UIEvents;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.osgi.service.event.Event;
import com.dgex.offspring.config.ContactsService;
import com.dgex.offspring.nxtCore.service.INxtService;
import com.dgex.offspring.swt.table.PaginationContainer;
import com.dgex.offspring.trader.api.IAssetExchange;
import com.dgex.offspring.ui.PlaceAskOrderWizard;
import com.dgex.offspring.ui.PlaceBidOrderWizard;
import com.dgex.offspring.user.service.IUser;
import com.dgex.offspring.user.service.IUserService;
public class MyAssetsPart {
private Composite mainComposite;
private MyAssetsViewer viewer;
private Combo comboSender;
private IUserService userService;
private final List<IUser> senders = new ArrayList<IUser>();
private IAssetExchange exchange;
private PaginationContainer paginationContainer;
@PostConstruct
public void postConstruct(final Composite parent, final INxtService nxt,
final IUserService userService, UISynchronize sync,
IStylingEngine engine, final IAssetExchange exchange) {
this.userService = userService;
this.exchange = exchange;
mainComposite = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().numColumns(1).spacing(5, 2).margins(0, 0)
.applyTo(mainComposite);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true)
.applyTo(mainComposite);
/* top bar - account selector */
createAccountCombo(mainComposite);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER)
.grab(true, false).applyTo(comboSender);
paginationContainer = new PaginationContainer(mainComposite, SWT.NONE);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true)
.applyTo(paginationContainer);
viewer = new MyAssetsViewer(paginationContainer.getViewerParent(), nxt,
userService, ContactsService.getInstance(), sync, engine);
paginationContainer.setTableViewer(viewer, 100);
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
Object assetId = selection.getFirstElement();
if (assetId instanceof Long) {
Asset asset = Asset.getAsset((Long) assetId);
if (asset instanceof Asset) {
exchange.setSelectedAsset(asset);
}
}
}
});
Menu contextMenu = new Menu(viewer.getTable());
viewer.getTable().setMenu(contextMenu);
MenuItem itemSellOrder = new MenuItem(contextMenu, SWT.PUSH);
itemSellOrder.setText("Place Sell Order");
itemSellOrder.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
Object assetId = selection.getFirstElement();
if (assetId instanceof Long) {
Asset asset = Asset.getAsset((Long) assetId);
if (asset != null) {
Shell shell = parent.getShell();
int quantity = 1;
long price = 0;
new WizardDialog(shell, new PlaceAskOrderWizard(userService, nxt,
(Long) assetId, quantity, price)).open();
}
}
}
});
MenuItem itemBuyOrder = new MenuItem(contextMenu, SWT.PUSH);
itemBuyOrder.setText("Place Buy Order");
itemBuyOrder.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
Object assetId = selection.getFirstElement();
if (assetId instanceof Long) {
Asset asset = Asset.getAsset((Long) assetId);
if (asset != null) {
Shell shell = parent.getShell();
int quantity = 1;
long price = 0;
new WizardDialog(shell, new PlaceBidOrderWizard(userService, nxt,
(Long) assetId, quantity, price)).open();
}
}
}
});
}
private void createAccountCombo(Composite parent) {
comboSender = new Combo(parent, SWT.READ_ONLY);
for (IUser user : userService.getUsers()) {
if (!user.getAccount().isReadOnly()) {
senders.add(user);
comboSender.add(createLabel(user));
}
}
int index = senders.indexOf(userService.getActiveUser());
index = index == -1 ? 0 : index;
comboSender.select(index);
comboSender.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
IUser user = senders.get(comboSender.getSelectionIndex());
if (user != null) {
userService.setActiveUser(user);
}
}
});
}
private String createLabel(IUser user) {
return "# " + user.getAccount().getStringId() + " " + user.getName();
}
@Inject
@Optional
private void onActiveUserChanged(
@UIEventTopic(IUserService.TOPIC_ACTIVEUSER_CHANGED) IUser user) {
if (viewer != null && !viewer.getControl().isDisposed()) {
viewer.refresh();
}
}
@Inject
@Optional
public void partActivation(
@UIEventTopic(UIEvents.UILifeCycle.ACTIVATE) Event event) {
if (viewer != null && !viewer.getControl().isDisposed()) {
viewer.refresh();
}
}
}