MVC CRUD Application–Filter records in the list based on user Conditions


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();
    }
}