Skip to content

Instantly share code, notes, and snippets.

@Peppe
Created November 11, 2014 13:08
Show Gist options
  • Save Peppe/04caa5eed53528049535 to your computer and use it in GitHub Desktop.
Save Peppe/04caa5eed53528049535 to your computer and use it in GitHub Desktop.
public class CrudView extends VerticalLayout {
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
CrudPresenter presenter = new CrudPresenter(this);
private Grid grid;
private BeanFieldGroup<President> fieldGroup = new BeanFieldGroup<President>(
President.class);
private TextField firstName;
private TextField lastName;
private ComboBox party;
private TextField tookOffice;
private TextField leftOffice;
public CrudView() {
HorizontalLayout headerRow = createHeader();
VerticalLayout gridLayout = createGrid();
VerticalLayout form = createForm();
HorizontalLayout buttonLayout = createButtonLayout();
addComponent(headerRow);
addComponent(gridLayout);
addComponent(form);
addComponent(buttonLayout);
setExpandRatio(gridLayout, 1);
setSizeFull();
presenter.init();
}
private HorizontalLayout createHeader() {
HorizontalLayout headerRow = new HorizontalLayout();
Label header = new Label("POTUS Database");
header.addStyleName(ValoTheme.LABEL_H1);
Button addNewButton = new Button("Add new");
headerRow.addComponent(header);
headerRow.addComponent(addNewButton);
headerRow.setExpandRatio(header, 1);
headerRow.setWidth("100%");
headerRow.setComponentAlignment(header, Alignment.MIDDLE_LEFT);
headerRow.setComponentAlignment(addNewButton, Alignment.MIDDLE_LEFT);
return headerRow;
}
private VerticalLayout createForm() {
VerticalLayout form = new VerticalLayout();
firstName = new TextField("First Name");
lastName = new TextField("Last Name");
party = new ComboBox("Party");
party.addContainerProperty("caption", String.class, null);
party.setItemCaptionPropertyId("caption");
for(Party aParty : Party.values()){
Item item = party.addItem(aParty);
item.getItemProperty("caption").setValue(aParty.getName());
}
tookOffice = new TextField("Took Office");
leftOffice = new TextField("Left Office");
firstName.setNullRepresentation("");
lastName.setNullRepresentation("");
tookOffice.setNullRepresentation("");
leftOffice.setNullRepresentation("");
Converter<String, DateTime> converter = new Converter<String, DateTime>() {
@Override
public DateTime convertToModel(String value,
Class<? extends DateTime> targetType, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
if (value != null && !value.equals("")) {
return new DateTime(value);
}
return null;
}
@Override
public String convertToPresentation(DateTime value,
Class<? extends String> targetType, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
if (value != null) {
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
return value.toString(formatter);
}
return null;
}
@Override
public Class<DateTime> getModelType() {
return DateTime.class;
}
@Override
public Class<String> getPresentationType() {
return String.class;
}
};
tookOffice.setConverter(converter);
leftOffice.setConverter(converter);
fieldGroup.bind(firstName, "firstName");
fieldGroup.bind(lastName, "lastName");
fieldGroup.bind(party, "party");
fieldGroup.bind(tookOffice, "tookOffice");
fieldGroup.bind(leftOffice, "leftOffice");
HorizontalLayout nameRow = new HorizontalLayout(firstName, lastName);
nameRow.setSpacing(true);
HorizontalLayout dateRow = new HorizontalLayout(tookOffice, leftOffice);
dateRow.setSpacing(true);
form.addComponent(nameRow);
form.addComponent(dateRow);
form.addComponent(party);
form.setMargin(true);
return form;
}
private VerticalLayout createGrid(){
VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setSizeFull();
grid = new Grid();
grid.setSelectionMode(SelectionMode.SINGLE);
grid.addSelectionChangeListener(new SelectionChangeListener() {
@Override
public void selectionChange(SelectionChangeEvent event) {
Object row = grid.getSelectedRow();
President president = (President) row;
System.out.println(president);
if(president == null){
president = new President();
}
fieldGroup.setItemDataSource(president);
}
});
layout.addComponent(grid);
return layout;
}
private HorizontalLayout createButtonLayout() {
HorizontalLayout buttonLayout = new HorizontalLayout();
buttonLayout.setWidth("100%");
buttonLayout.setSpacing(true);
buttonLayout.setMargin(true);
Button saveButton = new Button("Save");
Button revertButton = new Button("Revert");
Button cancelButton = new Button("Delete");
buttonLayout.addComponent(saveButton);
buttonLayout.addComponent(revertButton);
buttonLayout.addComponent(cancelButton);
buttonLayout.setExpandRatio(revertButton, 1);
return buttonLayout;
}
public void setPresidents(List<President> presidents) {
IndexedContainer container = new IndexedContainer();
container.addContainerProperty("firstName", String.class, null);
container.addContainerProperty("lastName", String.class, null);
container.addContainerProperty("party", String.class, null);
container.addContainerProperty("tookOffice", Date.class, null);
container.addContainerProperty("leftOffice", Date.class, null);
for (President president : presidents) {
Item item = container.addItem(president);
item.getItemProperty("firstName")
.setValue(president.getFirstName());
item.getItemProperty("lastName").setValue(president.getLastName());
item.getItemProperty("party").setValue(president.getParty().getName());
item.getItemProperty("tookOffice").setValue(
president.getTookOffice().toDate());
Date leftOffice = null;
if (president.getLeftOffice() != null) {
leftOffice = president.getLeftOffice().toDate();
}
item.getItemProperty("leftOffice").setValue(leftOffice);
}
grid.setContainerDataSource(container);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment