[richfaces-svn-commits] JBoss Rich Faces SVN: r6121 - in trunk/ui/dataTable/src/main: java/org/richfaces/component and 1 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri Feb 15 14:19:41 EST 2008


Author: konstantin.mishin
Date: 2008-02-15 14:19:41 -0500 (Fri, 15 Feb 2008)
New Revision: 6121

Modified:
   trunk/ui/dataTable/src/main/config/component/column.xml
   trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java
   trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java
   trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
Log:
RF-1741

Modified: trunk/ui/dataTable/src/main/config/component/column.xml
===================================================================
--- trunk/ui/dataTable/src/main/config/component/column.xml	2008-02-15 15:44:45 UTC (rev 6120)
+++ trunk/ui/dataTable/src/main/config/component/column.xml	2008-02-15 19:19:41 UTC (rev 6121)
@@ -94,6 +94,7 @@
 			<name>selfSorted</name>
 			<classname>boolean</classname>
 			<description></description>
+			<defaultvalue>true</defaultvalue>
 		</property>		
 		
 		<property elonly="true">

Modified: trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java
===================================================================
--- trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java	2008-02-15 15:44:45 UTC (rev 6120)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java	2008-02-15 19:19:41 UTC (rev 6121)
@@ -21,8 +21,16 @@
 
 package org.richfaces.component;
 
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
 
+import org.richfaces.model.ExtendedFilterField;
+import org.richfaces.model.FilterField;
+import org.richfaces.model.Ordering;
+import org.richfaces.model.SortField2;
 
+
+
 /**
  * JSF component class
  * 
@@ -36,4 +44,42 @@
 	public abstract String getSortMode();
 	
 	public abstract void setSortMode(String mode);
+	
+	public FilterField getFilterField(){
+		FilterField filterField = null;
+		MethodExpression filterMethod = getFilterMethod();
+		ValueExpression filterExpression = getValueExpression("filterExpression");
+		ValueExpression filterBy = getValueExpression("filterBy");
+		String filterValue = getFilterValue();
+		if (filterMethod != null) {
+			filterField = new FilterField(filterMethod);
+		} else if (filterExpression != null) {
+			filterField = new FilterField(filterExpression);
+		} else if (filterBy != null) {
+			filterField = new ExtendedFilterField(filterBy, filterValue);
+		}
+		return filterField;
+	}
+
+	public SortField2 getSortField(){
+		SortField2 sortField2 = null;
+		if (!Ordering.UNSORTED.equals(getSortOrder())) {
+			ValueExpression comparator = getValueExpression("comparator");
+			ValueExpression sortExpression = getValueExpression("sortExpression");
+			if (comparator != null) {
+				sortField2 = new SortField2(comparator, getSortOrder());
+			} else if (sortExpression != null) {
+				sortField2 = new SortField2(sortExpression, getSortOrder());
+			}
+		}
+		return sortField2;
+	}
+	
+	public void toggleSortOrder(){
+		if(Ordering.ASCENDING.equals(getSortOrder())) {
+			setSortOrder(Ordering.DESCENDING);
+		} else {
+			setSortOrder(Ordering.ASCENDING);							
+		}		
+	}
 }

Modified: trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java
===================================================================
--- trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java	2008-02-15 15:44:45 UTC (rev 6120)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java	2008-02-15 19:19:41 UTC (rev 6121)
@@ -22,8 +22,10 @@
 package org.richfaces.component;
 
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import javax.el.ELContext;
 import javax.el.ExpressionFactory;
@@ -170,38 +172,45 @@
 	@Override
 	protected ExtendedDataModel createDataModel() {
 		List<FilterField> filterFields = new LinkedList<FilterField>();
-		List<SortField2> sortFields = new LinkedList<SortField2>();
+		Map<String, SortField2> sortFieldsMap = new LinkedHashMap<String, SortField2>();
 		List<UIComponent> list = getChildren();
 		for (Iterator<UIComponent> iterator = list.iterator(); iterator.hasNext();) {
 			UIComponent component = iterator.next();
 			if (component instanceof org.richfaces.component.UIColumn) {
-				Column column = (Column) component;
-				MethodExpression filterMethod = column.getFilterMethod();
-				ValueExpression filterExpression = component.getValueExpression("filterExpression");
-				ValueExpression filterBy = component.getValueExpression("filterBy");
-				String filterValue = column.getFilterValue();
-				if (filterMethod != null) {
-					filterFields.add(new FilterField(filterMethod));
-				} else if (filterExpression != null) {
-					filterFields.add(new FilterField(filterExpression));
-				} else if (filterBy != null) {
-					filterFields.add(new ExtendedFilterField(filterBy, filterValue));
+				org.richfaces.component.UIColumn column = (org.richfaces.component.UIColumn) component;
+				FilterField filterField = column.getFilterField();
+				if (filterField != null) {
+					filterFields.add(filterField);
 				}
-				if (!Ordering.UNSORTED.equals(column.getSortOrder())) {
-					ValueExpression comparator = component.getValueExpression("comparator");
-					ValueExpression sortExpression = component.getValueExpression("sortExpression");
-					if (comparator != null) {
-						sortFields.add(new SortField2(comparator, column.getSortOrder()));
-					} else if (sortExpression != null) {
-						sortFields.add(new SortField2(sortExpression, column.getSortOrder()));
-					}
+				SortField2 sortField = column.getSortField();
+				if (sortField != null) {
+					sortFieldsMap.put(component.getId(), sortField);
 				}
 			}
 			
 		}
+		List<SortField2> sortFields = new LinkedList<SortField2>();
+		List sortPriority = getSortPriority();
+		if (sortPriority != null) {
+			for (Object object : sortPriority) {
+				if (object instanceof String) {
+					String id = (String) object;
+					SortField2 sortField = sortFieldsMap.get(id);
+					if (sortField != null) {
+						sortFields.add(sortField);
+						sortFieldsMap.remove(id);
+					}
+				}
+			}
+		}
+		sortFields.addAll(sortFieldsMap.values());
 		setFilterFields(filterFields);
 		setSortFields(sortFields);
 		ExtendedDataModel dataModel = super.createDataModel();
 		return new ModifiableModel(dataModel, getVar(), getFilterFields(), getSortFields());
 	}
+	
+	public abstract List getSortPriority();
+	public abstract void setSortPriority(List sortPriority);
+
 }
\ No newline at end of file

Modified: trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
===================================================================
--- trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java	2008-02-15 15:44:45 UTC (rev 6120)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java	2008-02-15 19:19:41 UTC (rev 6121)
@@ -22,6 +22,7 @@
 package org.richfaces.renderkit;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -485,20 +486,26 @@
 	protected void doDecode(FacesContext context, UIComponent component) {
 		Map<String, String> map = context.getExternalContext().getRequestParameterMap();
 		if (SORT_FILTER_PARAMETER.equals(map.get(component.getClientId(context)))) {
-			String id = map.get(SORT_FILTER_PARAMETER);
+			String clientId = map.get(SORT_FILTER_PARAMETER);
 			List<UIComponent> list = component.getChildren();
 			for (Iterator<UIComponent> iterator = list.iterator(); iterator
 					.hasNext();) {
 				UIComponent children = iterator.next();
-				if (children instanceof Column) {
-					Column column = (Column) children;
+				if (children instanceof org.richfaces.component.UIColumn) {
+					org.richfaces.component.UIColumn column = (org.richfaces.component.UIColumn) children;
 					children.setId(children.getId());
-					if(children.getClientId(context).equals(id)) {
-						if(Ordering.ASCENDING.equals(column.getSortOrder())) {
-							column.setSortOrder(Ordering.DESCENDING);
-						} else {
-							column.setSortOrder(Ordering.ASCENDING);							
+					if(children.getClientId(context).equals(clientId)) {
+						String id = children.getId();
+						UIDataTable table = (UIDataTable)component;
+						List sortPriority = table.getSortPriority();
+						if(sortPriority == null){
+							sortPriority = new ArrayList();
+							table.setSortPriority(sortPriority);
 						}
+						if(!sortPriority.contains(id)) {
+							sortPriority.add(id);
+						}
+						column.toggleSortOrder();
 					}
 					String filterValue = map.get(children.getClientId(context) + SORT_FILTER_PARAMETER);
 					if (filterValue != null) {




More information about the richfaces-svn-commits mailing list