package net.atos.java.example.boodschappen.client;
import java.util.List;
import net.atos.java.example.boodschappen.model.Boodschap;
import net.atos.java.example.boodschappen.shared.BoodschappenService;
import net.atos.java.example.boodschappen.shared.BoodschappenServiceAsync;
import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.view.client.ListDataProvider;
/**
* Algemeen boodschappen paneel.
*
* @author Pal Hargitai
*/
public class BoodschappenPanel extends FlowPanel {
/** Boodschappen service. */
private BoodschappenServiceAsync boodschappenService = GWT.create(BoodschappenService.class);
/** Aanbieder voor de boodschappen. */
private ListDataProvider<Boodschap> dataProvider;
/** De tabel voor de boodschappen. */
private CellTable<Boodschap> table;
/**
* Maakt het panel aan.
*/
public BoodschappenPanel() {
super();
// Maak de tabel.
table = new CellTable<Boodschap>();
table.addColumn(new NaamColumn(), "Naam");
table.addColumn(new HoeveelheidColumn(), "Hoeveelheid");
table.addColumn(new EenheidColumn(), "Eenheid");
table.addColumn(new AfvinkColumn(), "Hebben we!");
// Geef de tabel data.
dataProvider = new ListDataProvider<Boodschap>();
dataProvider.addDataDisplay(table);
// Haal de data op.
boodschappenService.ophalenBoodschappen(new BoodschappenCallback());
add(table);
}
/**
* Terug koppeling voor de gezochte boodschappen.
*
* @author Pal Hargitai
*/
public class BoodschappenCallback implements AsyncCallback<List<Boodschap>> {
/** {@inheritDoc} */
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
/** {@inheritDoc} */
@Override
public void onSuccess(List<Boodschap> result) {
dataProvider.setList(result);
dataProvider.flush();
}
}
/**
* Naam kolom.
*
* @author Pal Hargitai
*/
public class NaamColumn extends TextColumn<Boodschap> {
/** Default constructor. */
public NaamColumn() {
setSortable(true);
}
/** {@inheritDoc} */
@Override
public String getValue(Boodschap object) {
return object.getBoodschap();
}
}
/**
* Hoeveelheid kolom.
*
* @author Pal Hargitai
*/
public class HoeveelheidColumn extends TextColumn<Boodschap> {
/** Default constructor. */
public HoeveelheidColumn() {
setSortable(true);
}
/** {@inheritDoc} */
@Override
public String getValue(Boodschap object) {
if (object.getHoeveelheid() == null) {
return "";
} else {
return object.getHoeveelheid().toString();
}
}
}
/**
* Kolom voor hoeveelheid eenheid.
*
* @author Pal Hargitai
*/
public class EenheidColumn extends TextColumn<Boodschap> {
/** Default constructor. */
public EenheidColumn() {
setSortable(true);
}
/** {@inheritDoc} */
@Override
public String getValue(Boodschap object) {
if (object.getEenheid() == null) {
return "";
} else {
return object.getEenheid().toString();
}
}
}
/**
* Kolom voor het afvinken van de boodschap.
*
* @author Pal Hargitai
*/
public class AfvinkColumn extends Column<Boodschap, String> {
/** Default constructor. */
public AfvinkColumn() {
// Kolom heeft een knop.
super(new ButtonCell());
setFieldUpdater(new CheckFieldUpdater());
}
/** {@inheritDoc} */
@Override
public String getValue(Boodschap object) {
return "Check!";
}
}
/**
* Vinkt de boodschap af.
*
* @author Pal Hargitai
*/
public class CheckFieldUpdater implements FieldUpdater<Boodschap, String> {
/** {@inheritDoc} */
@Override
public void update(int index, Boodschap object, String value) {
boodschappenService.afvinkenBoodschap(object.getIdentificatie(), new VerversenCallback());
}
}
/**
* Maakt de terug koppeling van het ophalen van de boodschappen.
* @return De terug koppeling.
*/
public AsyncCallback<List<Boodschap>> createOphalenCallback() {
return new BoodschappenCallback();
}
/**
* Terug koppeling voor het verversen.
*
* @author Pal Hargitai
*/
public class VerversenCallback implements AsyncCallback<Void> {
/** {@inheritDoc} */
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
/** {@inheritDoc} */
@Override
public void onSuccess(Void result) {
boodschappenService.ophalenBoodschappen(new BoodschappenCallback());
}
}
/**
* Verstopt het paneel.
*
* @author Pal Hargitai
*/
public class VerstopCallback implements AsyncCallback<Void> {
/** {@inheritDoc} */
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
/** {@inheritDoc} */
@Override
public void onSuccess(Void result) {
setVisible(false);
}
}
}