Author: weber
Date: Fri Feb 24 15:37:31 2006
New Revision: 380866
URL: http://svn.apache.org/viewcvs?rev=380866&view=rev
Log:
add sortActionListener attribute to sheet
Modified:
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/Sorter.java
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/UIData.java
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/taglib/component/SheetTag.java
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TobagoDemoController.java
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/model/solar/SolarObject.java
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/OverviewController.java
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/SheetConfig.java
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/sheetControl.jsp
incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/SheetRenderer.java
incubator/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-sheet.js
Modified:
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java
(original)
+++
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java
Fri Feb 24 15:37:31 2006
@@ -23,30 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_ACCESS_KEY;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_ACTION_STRING;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_ALIGN;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_DISABLED;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_FOR;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_HOVER;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_LABEL;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_LABEL_WITH_ACCESS_KEY;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_READONLY;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_RENDER_RANGE;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_RENDER_RANGE_EXTERN;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_SORTABLE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_VALUE;
-import static
org.apache.myfaces.tobago.TobagoConstants.COMMAND_TYPE_NAVIGATE;
-import static
org.apache.myfaces.tobago.TobagoConstants.COMMAND_TYPE_RESET;
-import static
org.apache.myfaces.tobago.TobagoConstants.COMMAND_TYPE_SCRIPT;
-import static org.apache.myfaces.tobago.TobagoConstants.FACET_CHECKBOX;
-import static org.apache.myfaces.tobago.TobagoConstants.FACET_LABEL;
-import static org.apache.myfaces.tobago.TobagoConstants.FACET_RADIO;
-import static
org.apache.myfaces.tobago.TobagoConstants.RENDERER_TYPE_OUT;
-import static
org.apache.myfaces.tobago.TobagoConstants.RENDERER_TYPE_SELECT_BOOLEAN_CHECKBOX;
-import static
org.apache.myfaces.tobago.TobagoConstants.RENDERER_TYPE_SELECT_ONE_RADIO;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_CREATE_SPAN;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_ESCAPE;
+import static org.apache.myfaces.tobago.TobagoConstants.*;
import org.apache.myfaces.tobago.el.ConstantMethodBinding;
import org.apache.myfaces.tobago.event.SheetStateChangeEvent;
import org.apache.myfaces.tobago.renderkit.RendererBase;
@@ -55,33 +32,22 @@
import javax.faces.FactoryFinder;
import javax.faces.application.Application;
-import javax.faces.component.ActionSource;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.UIColumn;
+import javax.faces.component.*;
import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIGraphic;
import javax.faces.component.UIOutput;
-import javax.faces.component.UIParameter;
-import javax.faces.component.UISelectBoolean;
import javax.faces.component.UISelectItem;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.el.MethodBinding;
import javax.faces.el.ValueBinding;
+import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.model.SelectItem;
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
import javax.faces.webapp.UIComponentTag;
import javax.servlet.jsp.JspException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
public class ComponentUtil {
@@ -90,6 +56,9 @@
private static final String RENDER_KEY_PREFIX
=
"org.apache.myfaces.tobago.component.ComponentUtil.RendererKeyPrefix_";
+ private static final Class[] ACTION_LISTENER_ARGS =
{ActionEvent.class};
+
+
private ComponentUtil() {
}
@@ -917,13 +886,27 @@
final Application application = facesContext.getApplication();
if (actionListener != null) {
if (UIComponentTag.isValueReference(actionListener)) {
- Class[] arguments = {javax.faces.event.ActionEvent.class};
MethodBinding binding
- = application.createMethodBinding(actionListener,
arguments);
+ = application.createMethodBinding(actionListener,
ACTION_LISTENER_ARGS);
command.setActionListener(binding);
} else {
throw new IllegalArgumentException(
"Must be a valueReference (actionListener): " +
actionListener);
+ }
+ }
+ }
+
+ public static void setSortActionListener(UIData data, String
actionListener) {
+ final FacesContext facesContext = FacesContext.getCurrentInstance();
+ final Application application = facesContext.getApplication();
+ if (actionListener != null) {
+ if (UIComponentTag.isValueReference(actionListener)) {
+ MethodBinding binding
+ = application.createMethodBinding(actionListener,
ACTION_LISTENER_ARGS);
+ data.setSortActionListener(binding);
+ } else {
+ throw new IllegalArgumentException(
+ "Must be a valueReference (sortActionListener): " +
actionListener);
}
}
}
Modified:
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/Sorter.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/Sorter.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/Sorter.java
(original)
+++
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/Sorter.java
Fri Feb 24 15:37:31 2006
@@ -21,15 +21,12 @@
import org.apache.myfaces.tobago.TobagoConstants;
import static org.apache.myfaces.tobago.TobagoConstants.ATTR_SORTABLE;
import org.apache.myfaces.tobago.model.SheetState;
-import org.apache.myfaces.tobago.model.SortableByApplication;
import org.apache.myfaces.tobago.util.BeanComparator;
import org.apache.myfaces.tobago.util.ValueBindingComparator;
-import javax.faces.component.UIColumn;
-import javax.faces.component.UIComponent;
+import javax.faces.component.*;
import javax.faces.component.UIInput;
import javax.faces.component.UIOutput;
-import javax.faces.component.UISelectBoolean;
import javax.faces.context.FacesContext;
import javax.faces.el.EvaluationException;
import javax.faces.el.MethodBinding;
@@ -37,11 +34,7 @@
import javax.faces.el.ValueBinding;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
/**
* User: weber
@@ -52,8 +45,6 @@
private static final Log LOG = LogFactory.getLog(Sorter.class);
- public static final String ID_PREFIX = "sorter_";
-
public Object invoke(FacesContext facesContext, Object[] aobj)
throws EvaluationException {
@@ -63,87 +54,66 @@
if (LOG.isDebugEnabled()) {
LOG.debug("sorterId = " + command.getId());
}
- UIData data = (UIData) command.getParent();
+ UIColumn column = (UIColumn) command.getParent();
+ UIData data = (UIData) column.getParent();
+
Object value = data.getValue();
if (value instanceof DataModel) {
value = ((DataModel) value).getWrappedData();
}
SheetState sheetState = data.getSheetState(facesContext);
- int column = sheetState.getSortedColumn();
- boolean ascending = sheetState.isAscending();
Comparator comparator = null;
- if (value instanceof SortableByApplication
- || value instanceof List
- || value instanceof Object[]) {
+ if (value instanceof List || value instanceof Object[]) {
String sortProperty;
- if (command.getId() != null &&
command.getId().startsWith(ID_PREFIX)) {
- UIColumn uiColumn = null;
- try {
- int actualColumn =
- Integer.parseInt(
- command.getId().substring(ID_PREFIX.length()));
- if (actualColumn == column) {
- ascending = !ascending;
- } else {
- ascending = true;
- column = actualColumn;
- }
- sheetState.setAscending(ascending);
- sheetState.setSortedColumn(column);
+ try {
+ if (!updateSheetState(data, column, sheetState)) {
+ return null;
+ }
- uiColumn = data.getRendererdColumns().get(column);
- UIComponent child =
getFirstSortableChild(uiColumn.getChildren());
- if (child != null) {
- ValueBinding valueBinding =
child.getValueBinding("value");
- String var = data.getVar();
-
- if (valueBinding != null) {
- if
(isSimpleProperty(valueBinding.getExpressionString())) {
- String expressionString =
valueBinding.getExpressionString();
- if (expressionString.startsWith("#{")
- && expressionString.endsWith("}")) {
- expressionString =
- expressionString.substring(2,
- expressionString.length() - 1);
- }
- sortProperty =
expressionString.substring(var.length() + 1);
-
- comparator = new BeanComparator(sortProperty, null,
!ascending);
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("Sort property is " + sortProperty);
- }
- } else {
- comparator = new
ValueBindingComparator(facesContext, var, valueBinding, !ascending);
+ UIComponent child =
getFirstSortableChild(column.getChildren());
+ if (child != null) {
+ ValueBinding valueBinding = child.getValueBinding("value");
+ String var = data.getVar();
+
+ if (valueBinding != null) {
+ if
(isSimpleProperty(valueBinding.getExpressionString())) {
+ String expressionString =
valueBinding.getExpressionString();
+ if (expressionString.startsWith("#{")
+ && expressionString.endsWith("}")) {
+ expressionString =
+ expressionString.substring(2,
+ expressionString.length() - 1);
}
- }
+ sortProperty =
expressionString.substring(var.length() + 1);
- } else {
- LOG.error("No sortable component found!");
- removeSortableAttribute(uiColumn);
- return null;
- }
- } catch (Exception e) {
- LOG.error("Error while extracting sortMethod :" +
e.getMessage(), e);
- if (uiColumn != null) {
- removeSortableAttribute(uiColumn);
+ comparator = new BeanComparator(
+ sortProperty, null, !sheetState.isAscending());
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Sort property is " + sortProperty);
+ }
+ } else {
+ comparator = new ValueBindingComparator(
+ facesContext, var, valueBinding,
!sheetState.isAscending());
+ }
}
+
+ } else {
+ LOG.error("No sortable component found!");
+ removeSortableAttribute(column);
return null;
}
- } else {
- LOG.error(
- "Sorter.invoke() with illegal id in ActionEvent's
source");
+ } catch (Exception e) {
+ LOG.error("Error while extracting sortMethod :" +
e.getMessage(), e);
+ if (column != null) {
+ removeSortableAttribute(column);
+ }
return null;
}
- //if (value instanceof SortableByApplication) {
- //((SortableByApplication) value).sortBy(sortProperty);
-
- // TODO ???? sortable by application
- if (!(value instanceof SortableByApplication)) {
// TODO: locale / comparator parameter?
// don't compare numbers with Collator.getInstance()
comparator
// Comparator comparator = Collator.getInstance();
@@ -151,16 +121,43 @@
if (value instanceof List) {
Collections.sort((List) value, comparator);
- } else { // if (value instanceof Object[]) {
+ } else { // value is instanceof Object[]
Arrays.sort((Object[]) value, comparator);
}
- }
+
} else { // DataModel?, ResultSet, Result or Object
LOG.warn("Sorting not supported for type "
+ (value != null ? value.getClass().toString() :
"null"));
}
}
return null;
+ }
+
+ private boolean updateSheetState(UIData data, UIColumn uiColumn,
SheetState sheetState) {
+ int actualColumn = -1;
+ List<UIColumn> rendererdColumns = data.getRendererdColumns();
+ for (int i = 0; i < rendererdColumns.size(); i++) {
+ if (uiColumn == rendererdColumns.get(i)) {
+ actualColumn = i;
+ break;
+ }
+ }
+ if (actualColumn == -1) {
+ LOG.warn("Can't find column to sort in rendered columns of
sheet!");
+ return false;
+ }
+
+ int column = sheetState.getSortedColumn();
+ boolean ascending = sheetState.isAscending();
+ if (actualColumn == column) {
+ ascending = !ascending;
+ } else {
+ ascending = true;
+ column = actualColumn;
+ }
+ sheetState.setAscending(ascending);
+ sheetState.setSortedColumn(column);
+ return true;
}
private boolean isSimpleProperty(String expressionString) {
Modified:
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/UIData.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/UIData.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/UIData.java
(original)
+++
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/component/UIData.java
Fri Feb 24 15:37:31 2006
@@ -53,12 +53,14 @@
public static final String COMPONENT_TYPE =
"org.apache.myfaces.tobago.Data";
+ public static final String FACET_SORTER = "sorter";
+ public static final String SORTER_ID = "sorter";
+
private MethodBinding stateChangeListener;
private List<Integer> widthList;
- // TODO: should be removed?
- private Sorter sorter;
+ private MethodBinding sortActionListener;
private SheetState sheetState;
@@ -320,10 +322,10 @@
private void updateSheetState(FacesContext facesContext) {
SheetState state = getSheetState(facesContext);
if (state != null) {
- // ensure sorter
-// getSorter();
-// state.setSortedColumn(sorter != null ? sorter.getColumn() : -1);
-// state.setAscending(sorter != null && sorter.isAscending());
+ // ensure sortActionListener
+// getSortActionListener();
+// state.setSortedColumn(sortActionListener != null ?
sortActionListener.getColumn() : -1);
+// state.setAscending(sortActionListener != null &&
sortActionListener.isAscending());
state.setSelectedRows((List<Integer>)
getAttributes().get(ATTR_SELECTED_LIST_STRING));
state.setColumnWidths((String)
@@ -335,7 +337,7 @@
Object[] saveState = new Object[5];
saveState[0] = super.saveState(context);
saveState[1] = sheetState;
- saveState[2] = sorter;
+ saveState[2] = saveAttachedState(context, sortActionListener);
saveState[3] = saveAttachedState(context, stateChangeListener);
if (showHeaderSet) {
saveState[4] = showHeader;
@@ -347,7 +349,7 @@
Object[] values = (Object[]) savedState;
super.restoreState(context, values[0]);
sheetState = (SheetState) values[1];
- sorter = (Sorter) values[2];
+ sortActionListener = (MethodBinding)
restoreAttachedState(context, values[2]);
stateChangeListener = (MethodBinding)
restoreAttachedState(context, values[3]);
if (values[4] != null) {
showHeaderSet = true;
@@ -376,17 +378,16 @@
return columns;
}
- // TODO: should be removed?
- public Sorter getSorter() {
- if (sorter != null) {
- return sorter;
+ public MethodBinding getSortActionListener() {
+ if (sortActionListener != null) {
+ return sortActionListener;
} else {
return new Sorter();
}
}
- public void setSorter(Sorter sorter) {
- this.sorter = sorter;
+ public void setSortActionListener(MethodBinding sortActionListener) {
+ this.sortActionListener = sortActionListener;
}
public void queueEvent(FacesEvent facesEvent) {
Modified:
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/taglib/component/SheetTag.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/taglib/component/SheetTag.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/taglib/component/SheetTag.java
(original)
+++
incubator/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/taglib/component/SheetTag.java
Fri Feb 24 15:37:31 2006
@@ -16,19 +16,7 @@
* limitations under the License.
*/
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_COLUMNS;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_DIRECT_LINK_COUNT;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_FIRST;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_FORCE_VERTICAL_SCROLLBAR;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_INNER_WIDTH;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_ROWS;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_SHOW_DIRECT_LINKS;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_SHOW_HEADER;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_SHOW_PAGE_RANGE;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_SHOW_ROW_RANGE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_STATE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_VALUE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_VAR;
+import static org.apache.myfaces.tobago.TobagoConstants.*;
import org.apache.myfaces.tobago.apt.annotation.BodyContentDescription;
import org.apache.myfaces.tobago.apt.annotation.Tag;
import org.apache.myfaces.tobago.apt.annotation.TagAttribute;
@@ -59,6 +47,7 @@
private String forceVerticalScrollbar;
private String state;
private String stateChangeListener;
+ private String sortActionListener;
public String getComponentType() {
// TODO: implement uidata with overridden processUpdates to store
state
@@ -80,6 +69,7 @@
forceVerticalScrollbar = null;
state = null;
stateChangeListener = null;
+ sortActionListener = null;
}
protected void setProperties(UIComponent component) {
@@ -101,6 +91,7 @@
data.getAttributes().put(ATTR_INNER_WIDTH, new Integer(-1));
ComponentUtil.setValueBinding(component, ATTR_STATE, state);
ComponentUtil.setStateChangeListener(data, stateChangeListener);
+ ComponentUtil.setSortActionListener(data, sortActionListener);
}
@@ -280,5 +271,24 @@
public void setStateChangeListener(String stateChangeListener) {
this.stateChangeListener = stateChangeListener;
}
+
+ /**
+ * MethodBinding representing an actionListener method that will be
+ * invoked when sorting was requested by the user.
+ * Use this if your application needs special handling for sorting
columns.
+ * If this is not set and the sortable attribute column is not
false the sheet
+ * implementation will use a default sort method.
+ * The expression must evaluate to a public method that takes an
+ * ActionEvent parameter, with a return type of void.
+ * The parent of the actionEvents source will be the UIColumn
object for that
+ * the sorting is requested,
+ * <code>UIColumn column =
(UIColumn)actionEvent.getSource().getParent()</code>.
+ */
+ @TagAttribute
+ @UIComponentTagAttribute()
+ public void setSortActionListener(String sortActionListener) {
+ this.sortActionListener = sortActionListener;
+ }
+
}
Modified:
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TobagoDemoController.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TobagoDemoController.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TobagoDemoController.java
(original)
+++
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TobagoDemoController.java
Fri Feb 24 15:37:31 2006
@@ -61,6 +61,8 @@
private SolarObject[] solarArray;
+ private List<SolarObject> solarList;
+
private List<UIColumn> solarArrayColumns;
private String solarArrayColumnLayout;
@@ -148,6 +150,7 @@
= "**strong text**\n\n__emphasis__\n\nnormaler
text\n\n__dieses "
+ "ist emphasis__\n\n**und nochmal strong**\n\n**__ strong
und emphasis__**";
solarArray = SolarObject.getArray();
+ solarList = SolarObject.getList();
solarArrayColumns = createSolarArrayColumns();
solarArrayColumnLayout = "3*; 3*; 3*";
@@ -292,6 +295,14 @@
public void setSolarArray(SolarObject[] solarArray) {
this.solarArray = solarArray;
+ }
+
+ public List<SolarObject> getSolarList() {
+ return solarList;
+ }
+
+ public void setSolarList(List<SolarObject> solarList) {
+ this.solarList = solarList;
}
public List<UIColumn> getSolarArrayColumns() {
Modified:
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/model/solar/SolarObject.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/model/solar/SolarObject.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/model/solar/SolarObject.java
(original)
+++
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/model/solar/SolarObject.java
Fri Feb 24 15:37:31 2006
@@ -176,7 +176,17 @@
return array;
}
- public static List<SolarObject> getSatellites(String center) {
+
+ public static List<SolarObject> getList() {
+ SolarObject[] array = getArray();
+ List<SolarObject> list = new ArrayList<SolarObject>(array.length);
+ for (SolarObject object : array) {
+ list.add(object);
+ }
+ return list;
+ }
+
+ public static List<SolarObject> getSatellites(String center) {
List<SolarObject> collect = new ArrayList<SolarObject>();
SolarObject[] all = getArray();
for (int i = 0; i < all.length; i++) {
Modified:
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/OverviewController.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/OverviewController.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/OverviewController.java
(original)
+++
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/OverviewController.java
Fri Feb 24 15:37:31 2006
@@ -23,9 +23,12 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.tobago.component.Sorter;
+import org.apache.myfaces.tobago.component.UIData;
import org.apache.myfaces.tobago.context.ResourceManager;
import org.apache.myfaces.tobago.context.ResourceManagerFactory;
+import javax.faces.component.UICommand;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
@@ -109,6 +112,19 @@
public void click(ActionEvent actionEvent) {
lastAction = actionEvent.getComponent().getId();
+ }
+
+ + public void sheetSorter(ActionEvent event) {
+ Object eventSource = event.getSource();
+ UIData data = (UIData) ((UICommand)
eventSource).getParent().getParent();
+ List list = (List) data.getValue();
+ Object sun = list.remove(0);
+ Object[] objects = new Object[1];
+ objects[0] = event;
+ Sorter sorter = new Sorter();
+ sorter.invoke(FacesContext.getCurrentInstance(), objects);
+ list.add(0, sun);
}
public boolean getShowPopup() {
Modified:
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/SheetConfig.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/SheetConfig.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/SheetConfig.java
(original)
+++
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/overview/SheetConfig.java
Fri Feb 24 15:37:31 2006
@@ -47,7 +47,7 @@
private boolean sheetConfigPopup;
public SheetConfig() {
- sheetPagingStart = 1;
+ sheetPagingStart = 0;
sheetPagingLength = 7;
sheetDirectLinkCount = 5;
sheetDirectLinkCountItems = createSheetDirectLinkCountItems();
Modified:
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/sheetControl.jsp
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/sheetControl.jsp?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/sheetControl.jsp
(original)
+++
incubator/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/overview/sheetControl.jsp
Fri Feb 24 15:37:31 2006
@@ -106,7 +106,7 @@
</tc:toolBar>
</f:facet>
- <tc:sheet value="#{demo.solarArray}" id="sheet"
+ <tc:sheet value="#{demo.solarList}" id="sheet"
columns="3*;1*;3*;3*;3*;3*" var="luminary"
state="#{demo.sheetState}"
showHeader="#{overviewController.sheetConfig.sheetShowHeader}"
@@ -116,7 +116,8 @@
pagingStart="#{overviewController.sheetConfig.sheetPagingStart}"
pagingLength="#{overviewController.sheetConfig.sheetPagingLength}"
directLinkCount="#{overviewController.sheetConfig.sheetDirectLinkCount}"
- stateChangeListener="#{demo.stateChangeListener}">
+ stateChangeListener="#{demo.stateChangeListener}"
+ sortActionListener="#{overviewController.sheetSorter}">
<tc:column label="#{overviewBundle.solarArrayName}"
id="name" sortable="true">
<tc:out value="#{luminary.name}" id="t_name" />
</tc:column>
Modified:
incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/SheetRenderer.java
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/SheetRenderer.java?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/SheetRenderer.java
(original)
+++
incubator/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/SheetRenderer.java
Fri Feb 24 15:37:31 2006
@@ -23,44 +23,11 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_ACTION_STRING;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_ALIGN;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_COMMAND_TYPE;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_DIRECT_LINK_COUNT;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_DISABLED;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_FOOTER_HEIGHT;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_FORCE_VERTICAL_SCROLLBAR;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_IMAGE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_INLINE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_LABEL;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_LAYOUT_HEIGHT;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_MENU_POPUP;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_MENU_POPUP_TYPE;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_SELECTED_LIST_STRING;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_SHOW_DIRECT_LINKS;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_SHOW_PAGE_RANGE;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_SHOW_ROW_RANGE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_SORTABLE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_STYLE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_STYLE_BODY;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_STYLE_CLASS;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_STYLE_HEADER;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_TYPE;
-import static org.apache.myfaces.tobago.TobagoConstants.ATTR_WIDTH_LIST;
-import static
org.apache.myfaces.tobago.TobagoConstants.ATTR_WIDTH_LIST_STRING;
-import static
org.apache.myfaces.tobago.TobagoConstants.COMMAND_TYPE_SCRIPT;
-import static org.apache.myfaces.tobago.TobagoConstants.FACET_MENUPOPUP;
-import static
org.apache.myfaces.tobago.TobagoConstants.FACET_PAGER_PAGE;
-import static org.apache.myfaces.tobago.TobagoConstants.FACET_PAGER_ROW;
-import static
org.apache.myfaces.tobago.TobagoConstants.RENDERER_TYPE_LINK;
-import static
org.apache.myfaces.tobago.TobagoConstants.RENDERER_TYPE_MENUBAR;
-import static
org.apache.myfaces.tobago.TobagoConstants.RENDERER_TYPE_MENUCOMMAND;
-import static
org.apache.myfaces.tobago.TobagoConstants.SUBCOMPONENT_SEP;
+import static org.apache.myfaces.tobago.TobagoConstants.*;
import org.apache.myfaces.tobago.ajax.api.AjaxRenderer;
import org.apache.myfaces.tobago.ajax.api.AjaxUtils;
import org.apache.myfaces.tobago.component.ComponentUtil;
import org.apache.myfaces.tobago.component.Pager;
-import org.apache.myfaces.tobago.component.Sorter;
import org.apache.myfaces.tobago.component.UIColumnSelector;
import org.apache.myfaces.tobago.component.UIData;
import org.apache.myfaces.tobago.config.TobagoConfig;
@@ -77,22 +44,13 @@
import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
import javax.faces.application.Application;
-import javax.faces.component.UIColumn;
-import javax.faces.component.UICommand;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIPanel;
-import javax.faces.component.UIViewRoot;
+import javax.faces.component.*;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.el.MethodBinding;
import java.io.IOException;
import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
public class SheetRenderer extends RendererBase
implements SheetRendererWorkaround, AjaxRenderer {
@@ -774,7 +732,7 @@
String image1x1, int sortMarkerWidth) throws IOException {
String sheetId = component.getClientId(facesContext);
Application application = facesContext.getApplication();
- Sorter sorter = component.getSorter();
+ MethodBinding sorter = component.getSortActionListener();
List columnWidths
= (List) component.getAttributes().get(ATTR_WIDTH_LIST);
@@ -797,18 +755,23 @@
ComponentUtil.getBooleanAttribute(column,
ATTR_SORTABLE);
if (sortable && !(column instanceof UIColumnSelector)) {
- String sorterId = Sorter.ID_PREFIX + columnCount;
+ UICommand sortCommand = (UICommand)
column.getFacet(UIData.FACET_SORTER);
+ if (sortCommand == null) {
+ String columnId = column.getClientId(facesContext);
+ String sorterId =
columnId.substring(columnId.lastIndexOf(":") + 1 )
+ + "_" + UIData.SORTER_ID;
+ sortCommand
+ = (UICommand)
application.createComponent(UICommand.COMPONENT_TYPE);
+ sortCommand.setRendererType(RENDERER_TYPE_LINK);
+ sortCommand.setActionListener(sorter);
+ sortCommand.setId(sorterId);
+ column.getFacets().put(UIData.FACET_SORTER,
sortCommand); + }
+
String onclick = "submitAction('"
+ ComponentUtil.findPage(component).getFormId(facesContext)
- + "','" + component.getClientId(facesContext) + ":" +
sorterId + "')";
+ + "','" + sortCommand.getClientId(facesContext) + "')";
writer.writeAttribute("onclick", onclick, null);
- UICommand sortCommand = (UICommand)
- application.createComponent(UICommand.COMPONENT_TYPE);
- sortCommand.setRendererType(RENDERER_TYPE_LINK);
- sortCommand.setActionListener(sorter);
- sortCommand.setId(sorterId);
- component.getFacets().put(sorterId, sortCommand);
- sortCommand.getClientId(facesContext); // this must called here
to fix the ClientId
writer.writeAttribute("title",
ResourceManagerUtil.getPropertyNotNull(facesContext, "tobago",
Modified:
incubator/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-sheet.js
URL:
http://svn.apache.org/viewcvs/incubator/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-sheet.js?rev=380866&r1=380865&r2=380866&view=diff
==============================================================================
---
incubator/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-sheet.js
(original)
+++
incubator/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-sheet.js
Fri Feb 24 15:37:31 2006
@@ -34,6 +34,9 @@
LOG.debug("New Sheet with id " + this.sheetId);
},
+ sortOnclickRegExp :
+ new RegExp("submitAction\\(('|\")(.*?)('|\") *,
*('|\")(.*?)('|\")\\)"),
+
setup: function() {
// setup sorting headers
@@ -42,7 +45,18 @@
var headerBox = $(idPrefix + i++);
while (headerBox) {
if (headerBox.onclick) {
+ var match =
this.sortOnclickRegExp.exec(headerBox.onclick.valueOf());
+// LOG.debug("match[0] = " + match[0]);
+// LOG.debug("match[1] = " + match[1]);
+// LOG.debug("*match[2] = " + match[2]);
+// LOG.debug("match[3] = " + match[3]);
+// LOG.debug("match[4] = " + match[4]);
+// LOG.debug("*match[5] = " + match[5]);
+// LOG.debug("match[6] = " + match[6]);
+// headerBox.formId = match[2];
+ headerBox.sorterId = match[5];
headerBox.onclick = null;
+// LOG.debug("headerBox.id = " + headerBox.id);
Event.observe(headerBox, "click",
this.doSort.bindAsEventListener(this));
}
headerBox = $(idPrefix + i++);
@@ -97,10 +111,12 @@
doSort: function(event) {
var element = Event.element(event);
- var idx = element.id.lastIndexOf('_');
- idx = element.id.substring(idx + 1);
- var action = this.sheetId + Tobago.componentSeparator + "sorter_"
+ idx;
- this.reloadWithAction(action);
+ if (!element.sorterId) {
+ element = element.parentNode;
+ }
+// LOG.debug("element.id = " + element.id);
+// LOG.debug("sorterId = " + element.sorterId);
+ this.reloadWithAction(element.sorterId);
},
doPagingDirect: function(event) {