package demo.grid.inline_row_editing; import java.util.ArrayList; import java.util.List; import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.NotifyChange; import demo.data.ContributorData; import demo.data.pojo.LanguageContribution; public class InplaceEditingViewModel { private final ContributorData contributorData = new ContributorData(); private final List<LanguageContributionStatus> contributionStatuses = generateStatusList(contributorData.getLanguageContributors()); private boolean displayEdit = true; public boolean isDisplayEdit() { return displayEdit; } @NotifyChange({"languageContributions", "displayEdit"}) public void setDisplayEdit(boolean displayEdit) { this.displayEdit = displayEdit; } public List<LanguageContributionStatus> getLanguageContributions() { return contributionStatuses; } @Command public void changeEditableStatus(@BindingParam("languageContributionStatus") LanguageContributionStatus lcs) { lcs.setEditingStatus(!lcs.getEditingStatus()); refreshRowTemplate(lcs); } @Command public void confirm(@BindingParam("languageContributionStatus") LanguageContributionStatus lcs) { changeEditableStatus(lcs); refreshRowTemplate(lcs); } public void refreshRowTemplate(LanguageContributionStatus lcs) { /* * This code is special and notifies ZK that the bean's value * has changed as it is used in the template mechanism. * This stops the entire Grid's data from being refreshed */ BindUtils.postNotifyChange(null, null, lcs, "editingStatus"); } private static List<LanguageContributionStatus> generateStatusList(List<LanguageContribution> contributions) { List<LanguageContributionStatus> contribs = new ArrayList<LanguageContributionStatus>(); for(LanguageContribution lc : contributions) { contribs.add(new LanguageContributionStatus(lc, false)); } return contribs; } }