skip to main | skip to sidebar

Java Programs and Examples with Output

Pages

▼
 
  • RSS
  • Twitter
Monday, October 15, 2012

DataTable Sorting using wicket

Posted by Raju Gupta at 4:00 PM – 0 comments
 
Sorting a data table using apache wicket

//   DataTablePage.java

import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;

public class DataTablePage extends WebPage {
    
    public DataTablePage() {
        final DataTableUser user = new DataTableUser();
        
        IColumn[] columns = new IColumn[2];
        columns[0] = new PropertyColumn(new StringResourceModel("firstNameTableHeaderLabel", this, null), "name.first", "name.first");
        columns[1] = new PropertyColumn(new Model("Last Name"), "name.last", "name.last");
        
        DefaultDataTable table = new DefaultDataTable("datatable", columns, user, 10);
        
        add(table);
    }

}


// DataTableUser.java

import java.io.Serializable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

public class DataTableUser extends SortableDataProvider {

 class SortableDataProviderComparator implements Comparator<Contact>, Serializable {
  public int compare(final Contact o1, final Contact o2) {
   PropertyModel<Comparable> model1 = new PropertyModel<Comparable>(o1, getSort().getProperty());
   PropertyModel<Comparable> model2 = new PropertyModel<Comparable>(o2, getSort().getProperty());

   int result = model1.getObject().compareTo(model2.getObject());

   if (!getSort().isAscending()) {
    result = -result;
   }

   return result;
  }

 }

 private List<Contact> list = new ArrayList<Contact>();
 private SortableDataProviderComparator comparator = new SortableDataProviderComparator();

 public DataTableUser() {
  // The default sorting
  setSort("name.first", true);

  list.add(new Contact(new Name("FN1", "LN1")));
  list.add(new Contact(new Name("FN2", "LN2")));
  list.add(new Contact(new Name("FN3", "LN3")));

 }

 public Iterator<Contact> iterator(final int first, final int count) {

  // Get the data
  List<Contact> newList = new ArrayList<Contact>(list);

  // Sort the data
  Collections.sort(newList, comparator);

  return newList.subList(first, first + count).iterator();
 }

 public IModel<Contact> model(final Object object) {
  return new AbstractReadOnlyModel<Contact>() {
   @Override
   public Contact getObject() {
    return (Contact) object;
   }
  };
 }

 public int size() {
  return list.size();
 }

}

class Contact implements Serializable {

 private final Name name;

 public Contact(final Name name) {
  this.name = name;
 }

 public Name getName() {
  return name;
 }
}

class Name implements Serializable {

 private String firstName;
 private String lastName;

 public Name(final String fName, final String lName) {
  firstName = fName;
  lastName = lName;
 }

 public String getFirst() {
  return firstName;
 }

 public String getLast() {
  return lastName;
 }

 public void setFirst(final String firstName) {
  this.firstName = firstName;
 }

 public void setLast(final String lastName) {
  this.lastName = lastName;
 }
}

// DataTablePage.html

<html>
<head>
 <title>DataTable</title>
</head>

<body>
<table wicket:id="datatable"></table>
</body>
</html>


// DataTablePage.properties

firstNameTableHeaderLabel=First Name

Labels: Sorting Example

Leave a Reply

Newer Post Older Post
Subscribe to: Post Comments ( Atom )
  • Popular
  • Recent
  • Archives
Powered by Blogger.
 
 
 
© 2011 Java Programs and Examples with Output | Designs by Web2feel & Fab Themes

Bloggerized by DheTemplate.com - Main Blogger