Author: nbelaevski
Date: 2010-05-05 20:27:39 -0400 (Wed, 05 May 2010)
New Revision: 16904
Added:
root/framework/trunk/api/src/main/java/org/ajax4jsf/model/SequenceState.java
Removed:
root/framework/trunk/api/src/main/java/org/ajax4jsf/model/RepeatState.java
root/framework/trunk/impl/src/main/java/org/richfaces/component/DataAdaptorStateHelper.java
Modified:
root/framework/trunk/api/src/main/java/org/ajax4jsf/component/IterationStateHolder.java
root/framework/trunk/impl/src/main/java/org/richfaces/component/SavedState.java
root/framework/trunk/impl/src/main/java/org/richfaces/component/UIDataAdaptor.java
root/framework/trunk/impl/src/main/java/org/richfaces/component/UISequence.java
root/framework/trunk/impl/src/test/java/org/richfaces/component/DataAdaptorTestCase.java
root/ui-sandbox/trunk/components/datascroller/ui/src/main/java/org/richfaces/component/UIDataScroller.java
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UIExtendedDataTable.java
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UISubTable.java
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
Log:
https://jira.jboss.org/jira/browse/RF-8626
Modified:
root/framework/trunk/api/src/main/java/org/ajax4jsf/component/IterationStateHolder.java
===================================================================
---
root/framework/trunk/api/src/main/java/org/ajax4jsf/component/IterationStateHolder.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/framework/trunk/api/src/main/java/org/ajax4jsf/component/IterationStateHolder.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -23,7 +23,6 @@
package org.ajax4jsf.component;
-import javax.faces.context.FacesContext;
/**
* In the original {@link javax.faces.component.UIData} component, only state for a
@@ -37,18 +36,17 @@
/**
* Get component state for a current iteration.
- * @param context current {@link FacesContext}
* @return request-scope component state. Details are subject for a component
implementation
*/
- public Object getIterationState(FacesContext context);
+ public Object getIterationState();
/**
* Set component state for the next iteration. State can be either previously saved
iteration state
* or <code>null</code> value. In the second case component should reset
its state to the initial.
*
- * @param context current {@link FacesContext}
* @param state request-scope component state or <code>null</code>.
Details are subject for a component
* implementation
*/
- public void setIterationState(FacesContext context, Object state);
+ public void setIterationState(Object state);
+
}
Deleted: root/framework/trunk/api/src/main/java/org/ajax4jsf/model/RepeatState.java
===================================================================
--- root/framework/trunk/api/src/main/java/org/ajax4jsf/model/RepeatState.java 2010-05-06
00:26:30 UTC (rev 16903)
+++ root/framework/trunk/api/src/main/java/org/ajax4jsf/model/RepeatState.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -1,38 +0,0 @@
-/**
- * License Agreement.
- *
- * Rich Faces - Natural Ajax for Java Server Faces (JSF)
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-
-package org.ajax4jsf.model;
-
-/**
- * @author shura
- *
- */
-public abstract class RepeatState implements DataComponentState {
- public abstract int getFirst();
-
- public abstract int getRows();
-
- public Range getRange() {
- return new SequenceRange(getFirst(), getRows());
- }
-}
Copied: root/framework/trunk/api/src/main/java/org/ajax4jsf/model/SequenceState.java (from
rev 16894, root/framework/trunk/api/src/main/java/org/ajax4jsf/model/RepeatState.java)
===================================================================
--- root/framework/trunk/api/src/main/java/org/ajax4jsf/model/SequenceState.java
(rev 0)
+++
root/framework/trunk/api/src/main/java/org/ajax4jsf/model/SequenceState.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -0,0 +1,57 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+
+package org.ajax4jsf.model;
+
+
+
+/**
+ * @author shura
+ *
+ */
+public class SequenceState implements DataComponentState {
+
+ private int first;
+
+ private int rows;
+
+ public int getFirst() {
+ return first;
+ }
+
+ public void setFirst(int first) {
+ this.first = first;
+ }
+
+ public int getRows() {
+ return rows;
+ }
+
+ public void setRows(int rows) {
+ this.rows = rows;
+ }
+
+ public Range getRange() {
+ return new SequenceRange(getFirst(), getRows());
+ }
+}
Deleted:
root/framework/trunk/impl/src/main/java/org/richfaces/component/DataAdaptorStateHelper.java
===================================================================
---
root/framework/trunk/impl/src/main/java/org/richfaces/component/DataAdaptorStateHelper.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/framework/trunk/impl/src/main/java/org/richfaces/component/DataAdaptorStateHelper.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -1,137 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-package org.richfaces.component;
-
-import java.io.Serializable;
-
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-
-import org.ajax4jsf.model.DataComponentState;
-import org.ajax4jsf.model.ExtendedDataModel;
-import org.ajax4jsf.model.SerializableDataModel;
-
-/**
- * @author Nick Belaevski
- *
- */
-public final class DataAdaptorStateHelper implements StateHolder {
-
- private boolean tranzient = false;
-
- private boolean componentStateIsStateHolder = false;
-
- private Object savedComponentState;
-
- private DataComponentState dataComponentState;
-
- private ExtendedDataModel<?> extendedDataModel;
-
- public DataAdaptorStateHelper() {
- }
-
- DataAdaptorStateHelper(DataComponentState dataComponentState,
ExtendedDataModel<?> extendedDataModel) {
- super();
- this.dataComponentState = dataComponentState;
- this.extendedDataModel = extendedDataModel;
- }
-
- public DataComponentState getDataComponentState() {
- return dataComponentState;
- }
-
- public ExtendedDataModel<?> getExtendedDataModel() {
- return extendedDataModel;
- }
-
- public boolean isTransient() {
- return tranzient;
- }
-
- public void setTransient(boolean newTransientValue) {
- tranzient = newTransientValue;
- }
-
- public Object saveState(FacesContext context) {
- //TODO - save only encoded states (see UIDataAdaptor#getEncodedIds())?
-
- if (dataComponentState != null) {
- if (dataComponentState instanceof StateHolder) {
- componentStateIsStateHolder = true;
-
- StateHolder stateHolder = (StateHolder) dataComponentState;
- if (!stateHolder.isTransient()) {
- savedComponentState = stateHolder.saveState(context);
- }
- } else {
- componentStateIsStateHolder = false;
-
- if (dataComponentState instanceof Serializable) {
- savedComponentState = dataComponentState;
- }
- }
- }
-
- Object savedSerializableModel = null;
-
- if (dataComponentState != null && extendedDataModel != null) {
- // TODO handle model serialization - "execute" model
- savedSerializableModel =
extendedDataModel.getSerializableModel(dataComponentState.getRange());
- }
-
- if (savedComponentState != null || savedSerializableModel != null) {
- return new Object[] {
- componentStateIsStateHolder ? Boolean.TRUE : Boolean.FALSE,
- savedComponentState,
- savedSerializableModel
- };
- } else {
- return null;
- }
- }
-
- public void restoreState(FacesContext context, Object stateObject) {
- if (stateObject != null) {
- Object[] state = (Object[]) stateObject;
-
- componentStateIsStateHolder = Boolean.TRUE.equals(state[0]);
-
- if (componentStateIsStateHolder) {
- savedComponentState = state[1];
- } else {
- dataComponentState = (DataComponentState)
UIComponentBase.restoreAttachedState(context,
- savedComponentState);
- }
-
- extendedDataModel = (SerializableDataModel)
UIComponentBase.restoreAttachedState(context, state[2]);
- }
- }
-
- void restoreComponentState(FacesContext context, UIDataAdaptor dataAdaptor) {
- if (savedComponentState != null && componentStateIsStateHolder) {
- dataComponentState = dataAdaptor.createComponentState();
- ((StateHolder) dataComponentState).restoreState(context,
savedComponentState);
- savedComponentState = null;
- }
- }
-}
Modified: root/framework/trunk/impl/src/main/java/org/richfaces/component/SavedState.java
===================================================================
---
root/framework/trunk/impl/src/main/java/org/richfaces/component/SavedState.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/framework/trunk/impl/src/main/java/org/richfaces/component/SavedState.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -22,11 +22,10 @@
package org.richfaces.component;
+import java.io.Serializable;
+
import javax.faces.component.EditableValueHolder;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponentBase;
import javax.faces.component.UIForm;
-import javax.faces.context.FacesContext;
import org.ajax4jsf.component.IterationStateHolder;
@@ -38,18 +37,20 @@
*
* @author shura
*/
-public final class SavedState implements StateHolder {
+final class SavedState implements Serializable {
public static final SavedState EMPTY = new SavedState();
- private boolean tranzient = false;
+ private static final long serialVersionUID = -1563864456074187422L;
+
private boolean valid = true;
- private Object iterationState;
private boolean localValueSet;
private boolean submitted;
private Object submittedValue;
private Object value;
+ private Object iterationState;
+
public SavedState() {
super();
}
@@ -62,9 +63,10 @@
this.localValueSet = evh.isLocalValueSet();
}
- public SavedState(FacesContext context, IterationStateHolder ish) {
+ public SavedState(IterationStateHolder ish) {
super();
- this.iterationState = ish.getIterationState(context);
+
+ this.iterationState = ish.getIterationState();
}
public SavedState(UIForm form) {
@@ -92,7 +94,7 @@
return this.value;
}
- public void setValue(Object value) {
+ void setValue(Object value) {
this.value = value;
}
@@ -100,15 +102,15 @@
return this.localValueSet;
}
- public void setLocalValueSet(boolean localValueSet) {
+ void setLocalValueSet(boolean localValueSet) {
this.localValueSet = localValueSet;
}
- public Object getIterationState() {
+ Object getIterationState() {
return iterationState;
}
- public void setIterationState(Object iterationState) {
+ void setIterationState(Object iterationState) {
this.iterationState = iterationState;
}
@@ -129,40 +131,11 @@
evh.setLocalValueSet(this.localValueSet);
}
- public void apply(FacesContext context, IterationStateHolder ish) {
- ish.setIterationState(context, this.iterationState);
+ public void apply(IterationStateHolder ish) {
+ ish.setIterationState(iterationState);
}
public void apply(UIForm form) {
form.setSubmitted(this.submitted);
}
-
- public boolean isTransient() {
- return tranzient;
- }
-
- public void restoreState(FacesContext context, Object stateObject) {
- Object[] state = (Object[]) stateObject;
- iterationState = UIComponentBase.restoreAttachedState(context, state[0]);
- localValueSet = Boolean.TRUE.equals(state[1]);
- submitted = Boolean.TRUE.equals(state[2]);
- submittedValue = state[3];
- value = state[4];
- valid = Boolean.TRUE.equals(state[5]);
- }
-
- public Object saveState(FacesContext context) {
- return new Object[] {
- UIComponentBase.saveAttachedState(context, iterationState),
- localValueSet ? Boolean.TRUE : Boolean.FALSE,
- submitted ? Boolean.TRUE : Boolean.FALSE,
- submittedValue,
- value,
- valid ? Boolean.TRUE : Boolean.FALSE
- };
- }
-
- public void setTransient(boolean newTransientValue) {
- tranzient = newTransientValue;
- }
}
Modified:
root/framework/trunk/impl/src/main/java/org/richfaces/component/UIDataAdaptor.java
===================================================================
---
root/framework/trunk/impl/src/main/java/org/richfaces/component/UIDataAdaptor.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/framework/trunk/impl/src/main/java/org/richfaces/component/UIDataAdaptor.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -23,6 +23,7 @@
package org.richfaces.component;
import java.io.IOException;
+import java.io.Serializable;
import java.text.MessageFormat;
import java.util.Collection;
import java.util.Collections;
@@ -89,6 +90,113 @@
*/
public static final String COMPONENT_TYPE = "org.richfaces.Data";
+ private static final class IterationState implements Serializable {
+
+ private static final long serialVersionUID = -3502645160277416066L;
+
+ private DataComponentState componentState;
+
+ private Object savedComponentState;
+
+ private boolean componentStateIsStateHolder;
+
+ private ExtendedDataModel<?> dataModel;
+
+ public IterationState() {
+ super();
+ }
+
+ public IterationState(DataComponentState componentState,
ExtendedDataModel<?> dataModel) {
+ super();
+ this.componentState = componentState;
+ this.dataModel = dataModel;
+ }
+
+ public ExtendedDataModel<?> getDataModel() {
+ return dataModel;
+ }
+
+ public DataComponentState getComponentState() {
+ return componentState;
+ }
+
+ /**
+ * @param uiDataAdaptor
+ */
+ public void restoreComponentState(UIDataAdaptor uiDataAdaptor) {
+ if (savedComponentState != null && componentStateIsStateHolder) {
+ componentState = uiDataAdaptor.createComponentState();
+ ((StateHolder)
componentState).restoreState(FacesContext.getCurrentInstance(), savedComponentState);
+ savedComponentState = null;
+ }
+ }
+
+ final Object saveState() {
+ boolean localComponentStateIsHolder = false;
+ Object localSavedComponentState = null;
+
+ if (componentState != null) {
+ if (componentState instanceof StateHolder) {
+ localComponentStateIsHolder = true;
+
+ StateHolder stateHolder = (StateHolder) componentState;
+ if (!stateHolder.isTransient()) {
+ localSavedComponentState =
stateHolder.saveState(FacesContext.getCurrentInstance());
+ }
+ } else {
+ if (componentState instanceof Serializable) {
+ localSavedComponentState = componentState;
+ }
+ }
+ }
+
+ Object savedSerializableModel = null;
+
+ if (componentState != null && dataModel != null) {
+ // TODO handle model serialization - "execute" model
+ savedSerializableModel =
dataModel.getSerializableModel(componentState.getRange());
+ }
+
+ if (localSavedComponentState != null || savedSerializableModel != null) {
+ return new Object[] {
+ localComponentStateIsHolder,
+ localSavedComponentState,
+ savedSerializableModel
+ };
+ } else {
+ return null;
+ }
+ }
+
+ final void restoreState(Object stateObject) {
+ if (stateObject != null) {
+ Object[] state = (Object[]) stateObject;
+ componentStateIsStateHolder = Boolean.TRUE.equals(state[0]);
+ Object localSavedComponentState = state[1];
+
+ if (componentStateIsStateHolder) {
+ savedComponentState = localSavedComponentState;
+ } else {
+ componentState = (DataComponentState) localSavedComponentState;
+ }
+
+ dataModel = (ExtendedDataModel<?>) state[2];
+ }
+ }
+
+ private void writeObject(java.io.ObjectOutputStream out)
+ throws IOException {
+
+ out.writeObject(saveState());
+ }
+
+ private void readObject(java.io.ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+
+ restoreState(in.readObject());
+ }
+ }
+
private static final VisitCallback STUB_CALLBACK = new VisitCallback() {
public VisitResult visit(VisitContext context, UIComponent target) {
@@ -310,7 +418,7 @@
if (component instanceof IterationStateHolder) {
IterationStateHolder ish = (IterationStateHolder) component;
- state = new SavedState(facesContext, ish);
+ state = new SavedState(ish);
} else if (component instanceof EditableValueHolder) {
EditableValueHolder evh = (EditableValueHolder) component;
@@ -396,7 +504,7 @@
if (component instanceof IterationStateHolder) {
IterationStateHolder ish = (IterationStateHolder) component;
- savedState.apply(facesContext, ish);
+ savedState.apply(ish);
} else if (component instanceof EditableValueHolder) {
EditableValueHolder evh = (EditableValueHolder) component;
@@ -914,10 +1022,10 @@
* (non-Javadoc)
* @see org.ajax4jsf.component.IterationStateHolder#getIterationState()
*/
- public Object getIterationState(FacesContext context) {
+ public Object getIterationState() {
assert rowKey == null;
- return new DataAdaptorStateHelper(this.componentState, this.extendedDataModel);
+ return new IterationState(this.componentState, this.extendedDataModel);
}
/*
@@ -925,17 +1033,17 @@
*
* @see
org.ajax4jsf.component.IterationStateHolder#setIterationState(java.lang.Object)
*/
- public void setIterationState(FacesContext context, Object stateObject) {
+ public void setIterationState(Object stateObject) {
assert rowKey == null;
// TODO - ?
// restoreChildState(getFacesContext());
if (stateObject != null) {
- DataAdaptorStateHelper stateHelper = (DataAdaptorStateHelper) stateObject;
- stateHelper.restoreComponentState(context, this);
-
- this.componentState = stateHelper.getDataComponentState();
- this.extendedDataModel = stateHelper.getExtendedDataModel();
+ IterationState iterationState = (IterationState) stateObject;
+ iterationState.restoreComponentState(this);
+
+ this.componentState = iterationState.getComponentState();
+ this.extendedDataModel = iterationState.getDataModel();
} else {
this.componentState = null;
this.extendedDataModel = null;
@@ -1008,7 +1116,7 @@
@Override
public Object saveState(FacesContext context) {
Object parentState = super.saveState(context);
- Object savedComponentState = new DataAdaptorStateHelper(componentState,
extendedDataModel).saveState(context);
+ Object savedComponentState = new IterationState(componentState,
extendedDataModel).saveState();
Object converterState = null;
boolean nullDelta = true;
@@ -1067,13 +1175,13 @@
super.restoreState(context, state[0]);
if (state[1] != null) {
- DataAdaptorStateHelper dataAdaptorStateHelper = new
DataAdaptorStateHelper();
- dataAdaptorStateHelper.restoreState(context, state[1]);
- dataAdaptorStateHelper.restoreComponentState(context, this);
+ IterationState iterationState = new IterationState();
+ iterationState.restoreState(state[1]);
+ iterationState.restoreComponentState(this);
// TODO update state model binding
- componentState = dataAdaptorStateHelper.getDataComponentState();
- extendedDataModel = dataAdaptorStateHelper.getExtendedDataModel();
+ componentState = iterationState.getComponentState();
+ extendedDataModel = iterationState.getDataModel();
}
boolean converterHasPartialState = Boolean.TRUE.equals(state[2]);
Modified: root/framework/trunk/impl/src/main/java/org/richfaces/component/UISequence.java
===================================================================
---
root/framework/trunk/impl/src/main/java/org/richfaces/component/UISequence.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/framework/trunk/impl/src/main/java/org/richfaces/component/UISequence.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -43,9 +43,9 @@
import org.ajax4jsf.model.DataComponentState;
import org.ajax4jsf.model.ExtendedDataModel;
import org.ajax4jsf.model.Range;
-import org.ajax4jsf.model.RepeatState;
import org.ajax4jsf.model.SequenceDataModel;
import org.ajax4jsf.model.SequenceRange;
+import org.ajax4jsf.model.SequenceState;
/**
* @author Nick Belaevski
@@ -58,6 +58,19 @@
first, rows, value, iterationStatusVar
}
+ private void updateSequenceState(SequenceState state) {
+ state.setFirst(getActualFirst());
+ state.setRows(getActualRows());
+ }
+
+ protected int getActualFirst() {
+ return getFirst();
+ }
+
+ protected int getActualRows() {
+ return getRows();
+ }
+
@SuppressWarnings("unchecked")
protected DataModel<?> createFacesModel(Object value) {
DataModel<?> model = null;
@@ -111,17 +124,11 @@
@Override
protected DataComponentState createComponentState() {
- return new RepeatState() {
- @Override
- public int getFirst() {
- return UISequence.this.getFirst();
- }
+ SequenceState state = new SequenceState();
- @Override
- public int getRows() {
- return UISequence.this.getRows();
- }
- };
+ updateSequenceState(state);
+
+ return state;
}
/*
@@ -206,6 +213,8 @@
protected void setupVariable(FacesContext faces, boolean rowSelected) {
super.setupVariable(faces, rowSelected);
+ //TODO nick - should iterationStatus be available out of iteration?
+ // if yes, better name than "iterationStatusVar" is
required
String iterationStatusVar = getIterationStatusVar();
if (iterationStatusVar != null) {
Map<String, Object> requestMap = getVariablesMap(faces);
@@ -254,4 +263,14 @@
super.setValueExpression(name, binding);
}
+
+ @Override
+ protected void preEncodeBegin(FacesContext context) {
+ super.preEncodeBegin(context);
+
+ DataComponentState componentState = getComponentState();
+ if (componentState instanceof SequenceState) {
+ updateSequenceState((SequenceState) componentState);
+ }
+ }
}
Modified:
root/framework/trunk/impl/src/test/java/org/richfaces/component/DataAdaptorTestCase.java
===================================================================
---
root/framework/trunk/impl/src/test/java/org/richfaces/component/DataAdaptorTestCase.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/framework/trunk/impl/src/test/java/org/richfaces/component/DataAdaptorTestCase.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -227,14 +227,14 @@
assertNull(input.getLocalValue());
assertTrue(input.isValid());
assertFalse(input.isLocalValueSet());
- assertNull(stateHolder.getIterationState(facesContext));
+ assertNull(stateHolder.getIterationState());
form.setSubmitted(true);
input.setSubmittedValue("user input");
input.setValue("component value");
input.setValid(false);
input.setLocalValueSet(true);
- stateHolder.setIterationState(facesContext, "state");
+ stateHolder.setIterationState("state");
mockDataAdaptor.setRowKey(facesContext, Integer.valueOf(1));
@@ -243,12 +243,12 @@
assertNull(input.getLocalValue());
assertTrue(input.isValid());
assertFalse(input.isLocalValueSet());
- assertNull(stateHolder.getIterationState(facesContext));
+ assertNull(stateHolder.getIterationState());
input.setSubmittedValue("another input from user");
input.setValue("123");
assertTrue(input.isLocalValueSet());
- stateHolder.setIterationState(facesContext, "456");
+ stateHolder.setIterationState("456");
mockDataAdaptor.setRowKey(facesContext, Integer.valueOf(0));
assertTrue(form.isSubmitted());
@@ -256,7 +256,7 @@
assertEquals("component value", input.getLocalValue());
assertFalse(input.isValid());
assertTrue(input.isLocalValueSet());
- assertEquals("state", stateHolder.getIterationState(facesContext));
+ assertEquals("state", stateHolder.getIterationState());
mockDataAdaptor.setRowKey(facesContext, Integer.valueOf(1));
assertFalse(form.isSubmitted());
@@ -264,7 +264,7 @@
assertEquals("123", input.getLocalValue());
assertTrue(input.isValid());
assertTrue(input.isLocalValueSet());
- assertEquals("456", stateHolder.getIterationState(facesContext));
+ assertEquals("456", stateHolder.getIterationState());
mockDataAdaptor.setRowKey(facesContext, null);
assertFalse(form.isSubmitted());
@@ -272,7 +272,7 @@
assertNull(input.getLocalValue());
assertTrue(input.isValid());
assertFalse(input.isLocalValueSet());
- assertNull(stateHolder.getIterationState(facesContext));
+ assertNull(stateHolder.getIterationState());
}
public void testSaveRestoreChildrenStateNestedDataAdaptors() throws Exception {
@@ -492,11 +492,11 @@
return "test.Component";
}
- public Object getIterationState(FacesContext context) {
+ public Object getIterationState() {
return iterationState;
}
- public void setIterationState(FacesContext context, Object state) {
+ public void setIterationState(Object state) {
iterationState = state;
}
Modified:
root/ui-sandbox/trunk/components/datascroller/ui/src/main/java/org/richfaces/component/UIDataScroller.java
===================================================================
---
root/ui-sandbox/trunk/components/datascroller/ui/src/main/java/org/richfaces/component/UIDataScroller.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/ui-sandbox/trunk/components/datascroller/ui/src/main/java/org/richfaces/component/UIDataScroller.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -381,18 +381,13 @@
}
@Override
- public Object getIterationState(FacesContext context) {
- return new Object[] { this.page };
+ public Object getIterationState() {
+ return this.page;
}
@Override
- public void setIterationState(FacesContext context, Object state) {
- if (state != null) {
- Object[] stateObject = (Object[]) state;
- this.page = (Integer) stateObject[0];
- } else {
- this.page = null;
- }
+ public void setIterationState(Object state) {
+ this.page = (Integer) state;
}
}
Modified:
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UIExtendedDataTable.java
===================================================================
---
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UIExtendedDataTable.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UIExtendedDataTable.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -35,7 +35,6 @@
import org.ajax4jsf.model.DataComponentState;
import org.ajax4jsf.model.DataVisitor;
import org.ajax4jsf.model.Range;
-import org.ajax4jsf.model.RepeatState;
import org.richfaces.context.ExtendedVisitContext;
import org.richfaces.context.ExtendedVisitContextMode;
import org.richfaces.log.RichfacesLogger;
@@ -140,25 +139,20 @@
restoreOrigValue(faces);
}
- @Override
- protected DataComponentState createComponentState() {
- return new RepeatState() {
- @Override
- public int getFirst() {
- return UIExtendedDataTable.this.getFirst() +
UIExtendedDataTable.this.getClientFirst();
- }
+ protected int getActualFirst() {
+ return getFirst() + getClientFirst();
+ }
+
+ protected int getActualRows() {
+ int rows = getClientRows();
+
+ if (rows > 0) {
+ rows = Math.min(rows, getRows());
+ } else {
+ rows = getRows();
+ }
- @Override
- public int getRows() {
- int rows = getClientRows();
- if (rows > 0) {
- rows = Math.min(rows, UIExtendedDataTable.this.getRows());
- } else {
- rows = UIExtendedDataTable.this.getRows();
- }
- return rows;
- }
- };
+ return rows;
}
public int getClientFirst() {
Modified:
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UISubTable.java
===================================================================
---
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UISubTable.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UISubTable.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -132,21 +132,21 @@
}
@Override
- public void setIterationState(FacesContext context, Object stateObject) {
+ public void setIterationState(Object stateObject) {
Object[] state = (Object[])stateObject;
if(state != null) {
- super.setIterationState(context, state[0]);
+ super.setIterationState(state[0]);
getStateHelper().put(PropertyKeys.expanded, state[1]);
} else {
- super.setIterationState(context, null);
+ super.setIterationState(null);
getStateHelper().put(PropertyKeys.expanded, null);
}
}
@Override
- public Object getIterationState(FacesContext context) {
+ public Object getIterationState() {
Object [] state = new Object[2];
- state[0] = super.getIterationState(context);
+ state[0] = super.getIterationState();
state[1] = getStateHelper().get(PropertyKeys.expanded);
return state;
}
Modified:
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
===================================================================
---
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-05-06
00:26:30 UTC (rev 16903)
+++
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-05-06
00:27:39 UTC (rev 16904)
@@ -231,6 +231,8 @@
if (difference < 0) {
difference += clientRows;
}
+
+ //TODO nick - move this to external JavaScript file
writer.write("var richTBody =
document.getElementById('" + component.getClientId(context) + ":tb"
+ partNameFirstChar + "');");
writer.write("var richRows = richTBody.rows;");
@@ -239,6 +241,7 @@
writer.endEval();
}
writer.startEval();
+ //TODO nick - make this utility function in RendererUtils
writer.write("jQuery('#" +
component.getClientId(context).replace(":", "\\\\:")
+ "').triggerHandler('rich:onscrollcomplete', "
+ table.getClientFirst() + ");");
writer.endEval();