In the last post, We have seen how to display filter the data when user types the first few characters. Now if we remember the UI , we have a text box in the Top of the List and also there is check box to filter the active/inactive records .
Before that, if you want familiar with Check box events, please refer this post
Here is the Modified ZUL File
<?page title="Practice List" contentType="text/html;charset=UTF-8"?>
<zk>
<window title="Practice List" border="normal" sclass="listingwindow"
apply="myproject.UI.PracticeListController">
<div>
<button label="Add Practice" />
</div>
<separator />
<groupbox height="40px">
<label value="Practice Name" />
<space />
<space />
<textbox id="practicefilter" cols="50" />
<button id="gobutton" label="Go" />
<space spacing="20px" />
<checkbox id="activechk" label="Show only active" checked="true"/>
<space spacing="20px" />
</groupbox>
<separator />
<listbox id="PracticeList">
<listhead sizable="true">
<listheader label="Practice Name" sort="auto" />
<listheader label="City" sort="auto" />
<listheader label="State" sort="auto" />
<listheader label="Zip Code" sort="auto" />
</listhead>
</listbox>
</window>
</zk>
Here is the Controller File
package myproject.UI;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.InputEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Checkbox;
import org.zkoss.zk.ui.event.Event;
import mydomain.*;
@SuppressWarnings("rawtypes")
public class PracticeListController extends GenericForwardComposer {
/**
*
*/
private static final long serialVersionUID = 1L;
private Listbox PracticeList;
private PracticeDAO practicedao;
private Checkbox activechk;
@SuppressWarnings({ "unchecked" })
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
PracticeList.setItemRenderer(new ListitemRenderer() {
@Override
public void render(Listitem item, Object arg1, int arg2)
throws Exception {
practice value = (practice) arg1;
item.appendChild(new Listcell(value.getPracticeName()));
item.appendChild(new Listcell(value.getCity()));
item.appendChild(new Listcell(value.getState()));
item.appendChild(new Listcell(value.getZipCode()));
item.setValue(value);
}
});
practicedao = new PracticeDAO();
PracticeList.setModel(new ListModelList(practicedao.getAll()));
}
@SuppressWarnings("unchecked")
public void onChanging$practicefilter(InputEvent event) {
practicedao.setFilter(event.getValue());
PracticeList.getItems().clear();
PracticeList.setModel(new ListModelList(practicedao.getFilteredPractices()));
}
@SuppressWarnings("unchecked")
public void onCheck$activechk(Event event) {
practicedao.setActiveFlag(activechk.isChecked());
PracticeList.getItems().clear();
PracticeList.setModel(new ListModelList(practicedao.getFilteredPractices()));
}
}
Here is the Java POJO Class
package mydomain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "practice")
public class practice {
private String PRACTICE_NAME;
private String CITY;
private String STATE_PROVINCE_GEO;
private String POSTAL_CODE;
private int Practice_ID;
private Integer IS_ACTIVE;
@Id
@GeneratedValue
public int getPractice_ID() {
return Practice_ID;
}
public void setPractice_ID(int practice_ID) {
Practice_ID = practice_ID;
}
@Column(name = "PRACTICE_NAME")
public String getPracticeName() {
return PRACTICE_NAME;
}
@Column(name = "PRACTICE_NAME")
public void setPracticeName(String pRACTICE_NAME) {
PRACTICE_NAME = pRACTICE_NAME;
}
@Column(name = "CITY")
public String getCity() {
return CITY;
}
public void setCity(String cITY) {
CITY = cITY;
}
@Column(name = "STATE_PROVINCE_GEO")
public String getState() {
return STATE_PROVINCE_GEO;
}
@Column(name = "STATE_PROVINCE_GEO")
public void setState(String sTATE_PROVINCE_GEO) {
STATE_PROVINCE_GEO = sTATE_PROVINCE_GEO;
}
@Column(name = "POSTAL_CODE")
public String getZipCode() {
return POSTAL_CODE;
}
@Column(name = "POSTAL_CODE")
public void setZipCode(String pOSTAL_CODE) {
POSTAL_CODE = pOSTAL_CODE;
}
@Column(name = "IS_ACTIVE")
public Integer getisActive() {
if (IS_ACTIVE == null)
return 1;
else
return IS_ACTIVE;
}
public void setisActive(Integer isActive) {
this.IS_ACTIVE = isActive;
}
}
Here is the DAO Class
package mydomain;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.Query;
import java.util.ArrayList;
import HibernateUtilities.HibernateUtil;
public class PracticeDAO {
private String filter;
private boolean activeFlag;
List<practice> allrecords = null;
public void setFilter(String filter) {
this.filter = filter;
}
public void setActiveFlag(boolean flg) {
this.activeFlag = flg;
}
public List<practice> getFilteredPractices() {
List<practice> filteredPractices = new ArrayList<practice>();
/* if no filter characters and check box is un checked. Then get all */
/* 0 and 0 */
if ((filter == null || "".equals(filter)) && (activeFlag == false))
{
filteredPractices.addAll(allrecords);
}
/* if there are filter characters and check box is un checked. Then get filtered by filter text */
/* 1 and 0 */
if ((filter != null && !filter.equals("")) && (activeFlag == false))
{
for (practice item : allrecords)
{
if (item.getPracticeName().toLowerCase().indexOf(filter.toLowerCase()) == 0)
filteredPractices.add(item);
}
}
/* if no filter characters and check box is checked. Then get only active practices */
/* 0 and 1 */
if ((filter == null || "".equals(filter)) && (activeFlag == true))
{
for (practice item : allrecords)
{
if (item.getisActive() == 1)
filteredPractices.add(item);
}
}
/* Both Contains values i.e filter contains some text and check box is checked */
/* 1 and 1 */
if ((filter != null && !filter.equals("")) && (activeFlag == true))
{
for (practice item : allrecords)
{
if (item.getPracticeName().toLowerCase().indexOf(filter.toLowerCase()) == 0)
if (item.getisActive() == 1)
filteredPractices.add(item);
}
}
return filteredPractices;
}
@SuppressWarnings("rawtypes")
public List getAll() {
Transaction trns = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
trns = session.beginTransaction();
Query q1 = session.createQuery("from practice");
allrecords = q1.list();
/*
for (int i = 0; i < allrecords.size(); i++) {
practice pt = (practice) allrecords.get(i);
System.out.println(pt.getisActive().toString());
}
*/
session.getTransaction().commit();
} catch (RuntimeException e) {
if (trns != null) {
trns.rollback();
}
e.printStackTrace();
} finally {
session.flush();
session.close();
}
this.activeFlag = true;
return getFilteredPractices();
}
}