I'm using NetUI in a Weblogic Portal 10.2 portlet and I'm trying to make
sure my datagrid has a default order.
Hence the following begin action:

@Jpf.Action(
        forwards={
           @Jpf.Forward(name="index", action = "sortOpenCalls")
        }
    )
    protected Forward begin()
    {
        Forward forward = new Forward("index");

        //by default, order by descending date
        DataGridConfig config = DataGridConfigFactory.getInstance();
        Sort sortDate = config.createSort();
        sortDate.setDirection(SortDirection.DESCENDING);
        sortDate.setSortExpression("latestInformationIssueDate");
        List<Sort> sorts = Arrays.asList(new Sort[]{
            sortDate
        });
        SortModel sortModel = config.createSortModel(sorts);
        DataGridState dataGridState =
DataGridStateFactory.getInstance(getRequest()).getDataGridState("openCallsGrid");
        dataGridState.setSortModel(sortModel);

        return forward;
    }

Then the sortOpenCalls action loads the data and actually applies the sort:

@Jpf.Action(forwards = { @Jpf.Forward(name = "success", path =
"BrowseOpenCalls.jsp", actionOutputs = { @Jpf.ActionOutput(name =
"openCalls", type = eu.europa.ec.digit.cap.portal.dto.CallListItem[].class,
required = true), @Jpf.ActionOutput(name = "latestDatesOfCallPublications",
type = java.util.Date[].class, required = true) }) })
    public Forward sortOpenCalls() {
        Forward forward = new Forward("success");

        DataGridState dataGridState =
DataGridStateFactory.getInstance(getRequest()).getDataGridState("openCallsGrid");
        List<Sort> sorts = dataGridState.getSortModel().getSorts();
        List<Comparator> comparators = new ArrayList<Comparator>();
        if(sorts != null){
            for(final Sort sort:sorts){
                comparators.add(new Comparator(){
                    public int compare(Object o1, Object o2) {
                        try {
                            if(sort.getDirection() == SortDirection.NONE){
                                return 0;
                            } else if(sort.getDirection() ==
SortDirection.ASCENDING){
                                return BeanUtils.getSimpleProperty(o1,
sort.getSortExpression()).compareTo(BeanUtils.getSimpleProperty(o2,
sort.getSortExpression()));
                            } else if(sort.getDirection() ==
SortDirection.DESCENDING){
                                return -BeanUtils.getSimpleProperty(o1,
sort.getSortExpression()).compareTo(BeanUtils.getSimpleProperty(o2,
sort.getSortExpression()));
                            } else return 0;
                        } catch (IllegalAccessException e) {
                            return 0;
                        } catch (InvocationTargetException e) {
                            return 0;
                        } catch (NoSuchMethodException e) {
                            return 0;
                        }
                    }

                });
            }
        }

        CallListItem[] openCalls = callService.getOpenCalls();

        if(comparators.isEmpty()){
            forward.addActionOutput("openCalls", openCalls);
        } else {
            List<CallListItem> sortedOpenCalls = new
ArrayList(Arrays.asList(openCalls));
            Collections.sort(sortedOpenCalls,
ComparatorUtils.chainedComparator(comparators));
            forward.addActionOutput("openCalls", sortedOpenCalls.toArray(new
CallListItem[0]));
        }

        Date[] dates = callService.getLatestDatesOfCallPublications();
        forward.addActionOutput("latestDatesOfCallPublications", dates);

        return forward;
    }

Unfortunately, when the portlet loads, it is well sorted by
latestInformationIssueDate BUT in ASCENDING order instead of DESCENDING
order.
Any idea what I did wrong?

Sébastien Arbogast

http://sebastien-arbogast.com
http://mooplan.com

Reply via email to