Author: nbelaevski
Date: 2007-11-12 14:06:42 -0500 (Mon, 12 Nov 2007)
New Revision: 3935
Modified:
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/component/TranslatedSequenceDataModel.java
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java
Log:
latest changes for orderingList
Modified:
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/component/TranslatedSequenceDataModel.java
===================================================================
---
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/component/TranslatedSequenceDataModel.java 2007-11-12
18:19:34 UTC (rev 3934)
+++
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/component/TranslatedSequenceDataModel.java 2007-11-12
19:06:42 UTC (rev 3935)
@@ -67,6 +67,10 @@
}
}
+ public Object getTranslatedRowKey() {
+ return super.getRowKey();
+ }
+
public Object getRowKey() {
return rowKey;
}
Modified:
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java
===================================================================
---
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java 2007-11-12
18:19:34 UTC (rev 3934)
+++
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java 2007-11-12
19:06:42 UTC (rev 3935)
@@ -1,5 +1,6 @@
package org.richfaces.component;
+import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
@@ -37,6 +38,7 @@
import org.ajax4jsf.component.UIDataAdaptor;
import org.ajax4jsf.javascript.ScriptUtils;
import org.ajax4jsf.model.DataComponentState;
+import org.ajax4jsf.model.DataVisitor;
import org.ajax4jsf.model.ExtendedDataModel;
import org.ajax4jsf.model.RepeatState;
import org.apache.commons.collections.Predicate;
@@ -65,7 +67,7 @@
public static final class SubmittedValue {
private int[] permutationOrder;
private Set selectedItems = new HashSet();
- private int activeItem;
+ private Integer activeItem;
public SubmittedValue(String submittedString) {
super();
@@ -87,7 +89,7 @@
if ('s' == c) {
selectedItems.add(new Integer(permutationOrder[i]));
} else if ('a' == c) {
- activeItem = permutationOrder[i];
+ activeItem = new Integer(permutationOrder[i]);
} else {
break ;
}
@@ -104,11 +106,13 @@
for (int i = 0; i < permutationOrder.length; i++) {
result.append(permutationOrder[i]);
- if (selectedItems.contains(new Integer(i))) {
+ Integer key = new Integer(i);
+
+ if (selectedItems.contains(key)) {
result.append('s');
}
- if (activeItem == i) {
+ if (key.equals(activeItem)) {
result.append('a');
}
@@ -127,7 +131,8 @@
public static final Predicate isColumn = new Predicate() {
public boolean evaluate(Object input) {
- return (input instanceof UIColumn || input instanceof Column);
+ return (input instanceof UIColumn || input instanceof Column) &&
+ ((UIComponent) input).isRendered();
}
};
@@ -191,8 +196,39 @@
private transient SubmittedValue submittedValueHolder = null;
private transient EditableState editableState = new EditableState();
+ private void convertState(FacesContext faces) {
+ final HashSet selectionItemsSet = new HashSet();
+ final ExtendedDataModel dataModel = getExtendedDataModel();
+ try {
+ dataModel.walk(faces, new DataVisitor() {
+
+ public void process(FacesContext context, Object rowKey,
+ Object argument) throws IOException {
+
+ dataModel.setRowKey(rowKey);
+
+ if (selection != null && selection.contains(rowKey)) {
+ selectionItemsSet.add(getRowData());
+ }
+
+ if (rowKey.equals(activeItem)) {
+ activeItem = getRowData();
+ }
+ }
+
+ }, null, null);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ if (this.selection != null) {
+ this.selection = selectionItemsSet;
+ }
+ }
+
public void restoreState(FacesContext faces, Object object) {
- Object[] state = (Object[]) object;
+ final Object[] state = (Object[]) object;
super.restoreState(faces, state[0]);
validators = (List) restoreAttachedState(faces, state[1]);
validator = (MethodBinding) restoreAttachedState(faces, state[2]);
@@ -200,11 +236,11 @@
value = state[3];
localValueSet = ((Boolean) state[4]).booleanValue();
- selection = (Collection) state[5];
- localSelectionSet = ((Boolean) state[6]).booleanValue();
-
- activeItem = state[7];
- localActiveItemSet = ((Boolean) state[8]).booleanValue();
+ localSelectionSet = ((Boolean) state[5]).booleanValue();
+ localActiveItemSet = ((Boolean) state[6]).booleanValue();
+
+ selection = (Collection) state[7];
+ activeItem = state[8];
}
public Object saveState(FacesContext faces) {
@@ -216,12 +252,41 @@
state[3] = value;
state[4] = localValueSet ? Boolean.TRUE : Boolean.FALSE;
- state[5] = selection;
- state[6] = localSelectionSet ? Boolean.TRUE : Boolean.FALSE;
+ state[5] = localSelectionSet ? Boolean.TRUE : Boolean.FALSE;
+ state[6] = localActiveItemSet ? Boolean.TRUE : Boolean.FALSE;
- state[7] = activeItem;
- state[8] = localActiveItemSet ? Boolean.TRUE : Boolean.FALSE;
+ final HashSet selectionKeySet = new HashSet();
+ final HashSet activeItemSet = new HashSet(1);
+
+ final ExtendedDataModel dataModel = getExtendedDataModel();
+ try {
+ dataModel.walk(faces, new DataVisitor() {
+ public void process(FacesContext context, Object rowKey,
+ Object argument) throws IOException {
+
+ dataModel.setRowKey(rowKey);
+ Object data = dataModel.getRowData();
+ if (data.equals(activeItem)) {
+ activeItemSet.add(getTranslatedRowKey());
+ }
+
+ if (selection != null && selection.contains(data)) {
+ selectionKeySet.add(getTranslatedRowKey());
+ }
+
+ }
+
+ }, null, null);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ state[7] = selectionKeySet;
+
+ state[8] = activeItemSet.isEmpty() ? null : activeItemSet.iterator().next();
+
return state;
}
@@ -379,6 +444,8 @@
*/
public void processDecodes(FacesContext context) {
+ convertState(context);
+
if (context == null) {
throw new NullPointerException();
}
@@ -723,11 +790,13 @@
this.selection = selectionSet;
this.localSelectionSet = true;
- dataModel.setRowIndex(new Integer(submittedValueHolder.activeItem));
- Object activeItem = dataModel.getRowData();
+ if (submittedValueHolder.activeItem != null) {
+ dataModel.setRowKey(submittedValueHolder.activeItem);
+ Object activeItem = dataModel.getRowData();
- this.activeItem = activeItem;
- this.localActiveItemSet = true;
+ this.activeItem = activeItem;
+ this.localActiveItemSet = true;
+ }
Object previous = getValue();
setValue(newValue);
@@ -930,7 +999,10 @@
return (false);
}
-
+ public Object getTranslatedRowKey() {
+ return ((TranslatedSequenceDataModel) getExtendedDataModel()).getTranslatedRowKey();
+ }
+
private void addConversionErrorMessage(FacesContext context,
ConverterException ce, Object value) {
FacesMessage message = ce.getFacesMessage();
@@ -959,11 +1031,11 @@
}
public boolean isActiveItem() {
- return activeItem != null && activeItem.equals(getRowData());
+ return activeItem != null && activeItem.equals(getRowData()) ||
submittedValueHolder != null && (submittedValueHolder.activeItem != null
&& submittedValueHolder.activeItem.equals(getTranslatedRowKey()));
}
public boolean isSelected() {
- return selection != null && selection.contains(getRowData());
+ return selection != null && selection.contains(getRowData()) ||
submittedValueHolder != null &&
submittedValueHolder.selectedItems.contains(getTranslatedRowKey());
}
public abstract Collection getSelection();
Modified:
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java
===================================================================
---
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java 2007-11-12
18:19:34 UTC (rev 3934)
+++
trunk/sandbox/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java 2007-11-12
19:06:42 UTC (rev 3935)
@@ -13,9 +13,6 @@
import javax.faces.context.ResponseWriter;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
-import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.iterators.FilterIterator;
-import org.richfaces.component.Column;
import org.richfaces.component.UIOrderingList;
import org.richfaces.renderkit.html.images.OrderingListIconBottom;
import org.richfaces.renderkit.html.images.OrderingListIconBottomDisabled;
@@ -213,21 +210,6 @@
return true;
}
- protected Iterator columnFacets(UIOrderingList orderingList, final String name){
- return new FilterIterator(orderingList.columns(), new Predicate() {
-
- public boolean evaluate(Object input) {
- UIComponent component = (UIComponent) input;
- // accept only columns with corresponding facets.
- if (component instanceof Column || component instanceof UIColumn) {
- return component.isRendered()&&(component.getFacet(name) != null);
- }
- else{
- return false;
- }
- }});
- }
-
public void encodeCaption(FacesContext context, UIOrderingList orderingList)
throws IOException {
ResponseWriter writer = context.getResponseWriter();
@@ -252,7 +234,7 @@
throws IOException {
ResponseWriter writer = context.getResponseWriter();
//UIComponent header = orderingList.getHeader();
- Iterator headers = columnFacets(orderingList,"header");
+ Iterator headers = orderingList.columns();
if (headers.hasNext()) {
writer.startElement("thead", orderingList);
@@ -371,6 +353,8 @@
UIComponent facet = column.getFacet(facetName);
if (facet != null && facet.isRendered()) {
renderChild(context, facet);
+ } else {
+ writer.write(" ");
}
writer.endElement("div");