I think so, but now I go to a Kohlfahrt.
We can discuss this tommorrow :-)

Volker Weber schrieb:
Hi Bernd,

the sheet was already using a actionListener methodBinding to do the
sort. The (mainly) only thing i did was to enable defining the
methodBinding to use in the sheetTag.

Hmmm, when i started to write this mail, i thought it where mutch more
complicated to change this to queue a SortActionEvent instead of an
standard ActionEvent, because the event is generated in the
CommandRendererBase, but i just got an idea how to catch and replace
this ActionEvent with a SortActionEvent.

This could be done in the queueEvent() method of UIData.
Thoughts?

Regards,
  Volker

Bernd Bohmann wrote:

Hi Volker,

I would prefer an actionListener and a SortActionEvent instead of a
sortActionListener.

I don't like the x XYZActionListener.

Can you change it?

Regards

Bernd

[EMAIL PROTECTED] schrieb:


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) {






--
Dipl.-Ing. Bernd Bohmann - Atanion GmbH - Software Development
Bismarckstr. 13, 26122 Oldenburg, http://www.atanion.com
phone: +49 441 4082312, mobile: +49 173 8839471, fax: +49 441 4082333

Reply via email to