Example usage for org.apache.wicket.markup.html.navigation.paging IPagingLabelProvider IPagingLabelProvider

List of usage examples for org.apache.wicket.markup.html.navigation.paging IPagingLabelProvider IPagingLabelProvider

Introduction

In this page you can find the example usage for org.apache.wicket.markup.html.navigation.paging IPagingLabelProvider IPagingLabelProvider.

Prototype

IPagingLabelProvider

Source Link

Usage

From source file:org.sakaiproject.dash.tool.panels.CalendarLinksPanel.java

License:Educational Community License

/**
 * /*from  www . j a v a 2  s .  c o  m*/
 */
protected void initPanel() {

    if (selectedCalendarTab == null) {
        selectedCalendarTab = TAB_ID_UPCOMING;
    }

    if (this.calendarLinksDivId != null) {
        this.remove(calendarLinksDivId);
    }

    ResourceLoader rl = new ResourceLoader("dash_entity");

    final WebMarkupContainer calendarLinksDiv = new WebMarkupContainer("calendarLinksDiv");
    calendarLinksDiv.setOutputMarkupId(true);
    add(calendarLinksDiv);
    this.calendarLinksDivId = calendarLinksDiv.getId();

    calendarLinksDiv.add(new Label("calendarTitle", rl.getString("dash.calendar.title")));

    AjaxLink<IModel<List<CalendarLink>>> upcomingCalendarLink = new AjaxLink<IModel<List<CalendarLink>>>(
            "link") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            logger.debug("upcomingCalendarLink onClick called");
            // set currentCalendarTab to "upcoming"
            selectedCalendarTab = TAB_ID_UPCOMING;
            // reset calendar dataview to show upcoming stuff
            if (calendarLinksProvider == null) {
                calendarLinksProvider = new CalendarLinksDataProvider(selectedCalendarTab);
            } else {
                calendarLinksProvider.setCalendarTab(selectedCalendarTab);
            }

            // refresh calendarItemsDiv
            initPanel();
            target.addComponent(CalendarLinksPanel.this);
            target.appendJavascript("resizeFrame('grow');");
            target.appendJavascript("$('#schedPanel').focus();");
            dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_TABBING,
                    "/dashboard/calendar/upcoming");
        }

    };

    upcomingCalendarLink.add(new Label("label", rl.getString("dash.calendar.upcoming")));
    WebMarkupContainer upcomingCalendarTab = new WebMarkupContainer("upcomingCalendarTab");
    if (selectedCalendarTab == null || TAB_ID_UPCOMING.equalsIgnoreCase(selectedCalendarTab)) {
        upcomingCalendarTab.add(new SimpleAttributeModifier("class", "activeTab"));
    }
    upcomingCalendarTab.add(upcomingCalendarLink);
    calendarLinksDiv.add(upcomingCalendarTab);

    AjaxLink<IModel<List<CalendarLink>>> pastCalendarLink = new AjaxLink<IModel<List<CalendarLink>>>("link") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            logger.debug("pastCalendarLink onClick called");
            // set currentCalendarTab to "past"
            selectedCalendarTab = TAB_ID_PAST;

            // reset calendar dataview to show past stuff
            if (calendarLinksProvider == null) {
                calendarLinksProvider = new CalendarLinksDataProvider(selectedCalendarTab);
            } else {
                calendarLinksProvider.setCalendarTab(selectedCalendarTab);
            }

            // refresh calendarItemsDiv
            initPanel();
            target.addComponent(CalendarLinksPanel.this);
            target.appendJavascript("resizeFrame('grow');");
            target.appendJavascript("$('#schedPanel').focus();");
            dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_TABBING,
                    "/dashboard/calendar/past");
        }

    };
    pastCalendarLink.add(new Label("label", rl.getString("dash.calendar.past")));
    WebMarkupContainer pastCalendarTab = new WebMarkupContainer("pastCalendarTab");
    if (selectedCalendarTab != null && TAB_ID_PAST.equalsIgnoreCase(selectedCalendarTab)) {
        pastCalendarTab.add(new SimpleAttributeModifier("class", "activeTab"));
    }
    pastCalendarTab.add(pastCalendarLink);
    calendarLinksDiv.add(pastCalendarTab);

    AjaxLink<IModel<List<CalendarLink>>> starredCalendarLink = new AjaxLink<IModel<List<CalendarLink>>>(
            "link") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            logger.debug("starredCalendarLink onClick called");
            // set currentCalendarTab to "starred"
            selectedCalendarTab = TAB_ID_STARRED;

            // reset calendar dataview to show starred stuff
            if (calendarLinksProvider == null) {
                calendarLinksProvider = new CalendarLinksDataProvider(selectedCalendarTab);
            } else {
                calendarLinksProvider.setCalendarTab(selectedCalendarTab);
            }

            // refresh calendarItemsDiv
            initPanel();
            target.addComponent(CalendarLinksPanel.this);
            target.appendJavascript("resizeFrame('grow');");
            target.appendJavascript("$('#schedPanel').focus();");
            dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_TABBING,
                    "/dashboard/calendar/starred");
        }

    };
    starredCalendarLink.add(new Label("label", rl.getString("dash.calendar.starred")));
    WebMarkupContainer starredCalendarTab = new WebMarkupContainer("starredCalendarTab");
    if (selectedCalendarTab != null && TAB_ID_STARRED.equalsIgnoreCase(selectedCalendarTab)) {
        starredCalendarTab.add(new SimpleAttributeModifier("class", "activeTab"));
    }
    starredCalendarTab.add(starredCalendarLink);
    calendarLinksDiv.add(starredCalendarTab);

    AjaxLink<IModel<List<CalendarLink>>> hiddenCalendarLink = new AjaxLink<IModel<List<CalendarLink>>>("link") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            logger.debug("hiddenCalendarLink onClick called");
            // set currentCalendarTab to "hidden"
            selectedCalendarTab = TAB_ID_HIDDEN;

            // reset calendar dataview to show hidden stuff
            if (calendarLinksProvider == null) {
                calendarLinksProvider = new CalendarLinksDataProvider(selectedCalendarTab);
            } else {
                calendarLinksProvider.setCalendarTab(selectedCalendarTab);
            }

            // refresh calendarItemsDiv
            initPanel();
            target.addComponent(CalendarLinksPanel.this);
            target.appendJavascript("resizeFrame('grow');");
            target.appendJavascript("$('#schedPanel').focus();");
            dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_TABBING,
                    "/dashboard/calendar/hidden");
        }

    };
    hiddenCalendarLink.add(new Label("label", rl.getString("dash.calendar.hidden")));
    WebMarkupContainer hiddenCalendarTab = new WebMarkupContainer("hiddenCalendarTab");
    if (selectedCalendarTab != null && TAB_ID_HIDDEN.equalsIgnoreCase(selectedCalendarTab)) {
        hiddenCalendarTab.add(new SimpleAttributeModifier("class", "activeTab"));
    }
    hiddenCalendarTab.add(hiddenCalendarLink);
    calendarLinksDiv.add(hiddenCalendarTab);

    if (calendarLinksProvider == null) {
        calendarLinksProvider = new CalendarLinksDataProvider(selectedCalendarTab);
    } else {
        calendarLinksProvider.setCalendarTab(selectedCalendarTab);
    }

    WebMarkupContainer haveLinks = new WebMarkupContainer("haveLinks");
    calendarLinksDiv.add(haveLinks);

    //present the calendar data in a table
    final DataView<CalendarLink> calendarDataView = new DataView<CalendarLink>("calendarItems",
            calendarLinksProvider) {

        @Override
        public void populateItem(final Item item) {
            if (item != null && item.getModelObject() != null) {
                item.setOutputMarkupId(true);
                ResourceLoader rl = new ResourceLoader("dash_entity");

                final CalendarLink cLink = (CalendarLink) item.getModelObject();
                final CalendarItem cItem = cLink.getCalendarItem();

                if (logger.isDebugEnabled()) {
                    logger.debug(this + "populateItem()  item: " + item);
                }

                String itemType = cItem.getSourceType().getIdentifier();
                item.add(new Label("itemType", itemType));
                item.add(new Label("itemCount", "1"));
                item.add(new Label("entityReference", cItem.getEntityReference()));
                Component timeLabel = new Label("calendarDate",
                        DateUtil.getCalendarTimeString(cItem.getCalendarTime()));
                timeLabel.add(new AttributeModifier("title", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        // TODO Auto-generated method stub
                        return DateUtil.getFullDateString(cItem.getCalendarTime());
                    }

                }));
                item.add(timeLabel);
                //item.add(new Label("calendarTime", new SimpleDateFormat(TIME_FORMAT).format(cItem.getCalendarTime())));

                Image icon = new Image("icon");
                icon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        // TODO Auto-generated method stub
                        return dashboardCommonLogic.getEntityIconUrl(cItem.getSourceType().getIdentifier(),
                                cItem.getSubtype());
                    }

                }));
                item.add(icon);
                StringBuilder errorMessages = new StringBuilder();
                String title = FormattedText.processFormattedText(cItem.getTitle(), errorMessages, true, true);
                if (errorMessages != null && errorMessages.length() > 0) {
                    logger.warn("Error(s) encountered while cleaning calendarItem title:\n" + errorMessages);
                }
                ExternalLink itemLink = new ExternalLink("itemLink", "#itemEvent");
                itemLink.add(new Label("itemTitle", title));
                itemLink.add(new Label("itemClick", rl.getString("dash.details")));
                item.add(itemLink);

                String calendarItemLabel = dashboardCommonLogic.getString(cItem.getCalendarTimeLabelKey(), "",
                        itemType);
                if (calendarItemLabel == null) {
                    calendarItemLabel = "";
                }
                item.add(new Label("itemLabel", calendarItemLabel));
                item.add(new ExternalLink("siteLink", cItem.getContext().getContextUrl(),
                        cItem.getContext().getContextTitle()));

                if (cLink.isSticky()) {
                    AjaxLink<CalendarLink> starringAction = new AjaxLink<CalendarLink>("starringAction") {
                        protected long calendarItemId = cItem.getId();
                        protected Component thisRow = item;

                        @Override
                        public void onClick(AjaxRequestTarget target) {
                            logger.debug("starringAction onClick() called -- unstar ");
                            // need to keep one item
                            logger.debug(calendarItemId);
                            //logger.debug(this.getModelObject());

                            String sakaiUserId = sakaiProxy.getCurrentUserId();
                            boolean success = dashboardCommonLogic.unkeepCalendarItem(sakaiUserId,
                                    calendarItemId);
                            dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_UNSTAR,
                                    "/dashboard/calendar/" + selectedCalendarTab + "/" + calendarItemId);

                            // if success adjust UI, else report failure?
                            if (success) {
                                target.addComponent(CalendarLinksPanel.this);
                                if (TAB_ID_STARRED.equals(selectedCalendarTab)) {
                                    ResourceLoader rl = new ResourceLoader("dash_entity");

                                    CalendarItem changedItem = dashboardCommonLogic
                                            .getCalendarItem(calendarItemId);
                                    JsonHelper jsonHelper = new JsonHelper(dashboardCommonLogic,
                                            dashboardConfig);
                                    String jsonStr = jsonHelper.getJsonObjectFromCalendarItem(changedItem)
                                            .toString();
                                    String javascript = "reportSuccess('"
                                            + rl.getString("dash.ajax.unstar.success") + "'," + jsonStr + ",'"
                                            + "not-sure-about-url-yet" + "');";
                                    target.appendJavascript(javascript);
                                    target.appendJavascript("resizeFrame('grow');");
                                    target.appendJavascript("$('#schedPanel').focus();");
                                }
                            }
                        }

                    };

                    starringAction.setDefaultModel(item.getModel());
                    item.add(starringAction);

                    Image starringActionIcon = new Image("starringActionIcon");
                    starringActionIcon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            return dashboardConfig.getActionIcon(dashboardConfig.ACTION_UNSTAR);
                        }

                    }));
                    starringActionIcon.add(new AttributeModifier("alt", true, new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            ResourceLoader rl = new ResourceLoader("dash_entity");
                            return rl.getString("dash.unstar");
                        }

                    }));
                    starringAction.add(starringActionIcon);
                    //starringAction.add(new Label("starringActionLabel", "Unstar"));

                    if (cLink.isHidden()) {
                        // this shouldn't happen, but just in case ...
                        starringAction.setVisible(false);
                        starringAction.setVisibilityAllowed(false);
                    }
                } else {
                    AjaxLink<CalendarLink> starringAction = new AjaxLink<CalendarLink>("starringAction") {
                        protected long calendarItemId = cItem.getId();
                        protected Component thisRow = item;

                        @Override
                        public void onClick(AjaxRequestTarget target) {
                            logger.debug("starringAction onClick() called -- star ");
                            // need to keep one item
                            logger.debug(calendarItemId);
                            //logger.debug(this.getModelObject());

                            ResourceLoader rl = new ResourceLoader("dash_entity");

                            String sakaiUserId = sakaiProxy.getCurrentUserId();
                            boolean success = dashboardCommonLogic.keepCalendarItem(sakaiUserId,
                                    calendarItemId);
                            dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_STAR,
                                    "/dashboard/calendar/" + selectedCalendarTab + "/" + calendarItemId);

                            // if success adjust UI, else report failure?
                            if (success) {
                                target.addComponent(CalendarLinksPanel.this);
                                //String javascript = "alert('success. (" + thisRow.getMarkupId() + ")');";
                                //target.appendJavascript(javascript );
                                target.appendJavascript("resizeFrame('grow');");
                                target.appendJavascript("$('#schedPanel').focus();");
                            }
                        }

                    };
                    Image starringActionIcon = new Image("starringActionIcon");
                    starringActionIcon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            return dashboardConfig.getActionIcon(dashboardConfig.ACTION_STAR);
                        }

                    }));
                    starringActionIcon.add(new AttributeModifier("alt", true, new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            ResourceLoader rl = new ResourceLoader("dash_entity");
                            return rl.getString("dash.star");
                        }

                    }));
                    starringAction.add(starringActionIcon);

                    //starringAction.add(new Label("starringActionLabel", "Star"));
                    item.add(starringAction);

                    if (cLink.isHidden()) {
                        starringAction.setVisible(false);
                        starringAction.setVisibilityAllowed(false);
                    }
                }

                if (cLink.isHidden()) {
                    AjaxLink<CalendarLink> hidingAction = new AjaxLink<CalendarLink>("hidingAction") {
                        protected long calendarItemId = cItem.getId();
                        protected Component thisRow = item;

                        @Override
                        public void onClick(AjaxRequestTarget target) {
                            logger.debug("hidingAction onClick() called -- show");
                            // need to trash one item
                            logger.debug(calendarItemId);
                            //logger.debug(this.getModelObject());
                            String sakaiUserId = sakaiProxy.getCurrentUserId();
                            boolean success = dashboardCommonLogic.unhideCalendarItem(sakaiUserId,
                                    calendarItemId);
                            dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_SHOW,
                                    "/dashboard/calendar/" + selectedCalendarTab + "/" + calendarItemId);

                            // if success adjust UI, else report failure?
                            if (success) {
                                ResourceLoader rl = new ResourceLoader("dash_entity");

                                target.addComponent(CalendarLinksPanel.this);
                                CalendarItem changedItem = dashboardCommonLogic.getCalendarItem(calendarItemId);
                                JsonHelper jsonHelper = new JsonHelper(dashboardCommonLogic, dashboardConfig);
                                String jsonStr = jsonHelper.getJsonObjectFromCalendarItem(changedItem)
                                        .toString();
                                String javascript = "reportSuccess('" + rl.getString("dash.ajax.show.success")
                                        + "'," + jsonStr + ",'" + "not-sure-about-url-yet" + "');";
                                target.appendJavascript(javascript);
                                target.appendJavascript("resizeFrame('grow');");
                                target.appendJavascript("$('#schedPanel').focus();");
                            }
                        }

                    };
                    hidingAction.setDefaultModel(item.getModel());
                    //actionHideThisLink.setModelObject(cItem);
                    item.add(hidingAction);
                    Image hidingActionIcon = new Image("hidingActionIcon");
                    hidingActionIcon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            return dashboardConfig.getActionIcon(dashboardConfig.ACTION_SHOW);
                        }

                    }));
                    hidingActionIcon.add(new AttributeModifier("alt", true, new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            ResourceLoader rl = new ResourceLoader("dash_entity");
                            return rl.getString("dash.show");
                        }

                    }));
                    hidingAction.add(hidingActionIcon);
                    //hidingAction.add(new Label("hidingActionLabel", "Show"));

                    if (cLink.isSticky() || TAB_ID_PAST.equals(selectedCalendarTab)) {
                        // this shouldn't happen, but just in case ...
                        hidingAction.setVisible(false);
                        hidingAction.setVisibilityAllowed(false);
                    }

                } else {
                    AjaxLink<CalendarLink> hidingAction = new AjaxLink<CalendarLink>("hidingAction") {
                        protected long calendarItemId = cItem.getId();
                        protected Component thisRow = item;

                        @Override
                        public void onClick(AjaxRequestTarget target) {
                            logger.debug("hidingAction onClick() called -- hide");
                            // need to trash one item
                            logger.debug(calendarItemId);
                            //logger.debug(this.getModelObject());
                            String sakaiUserId = sakaiProxy.getCurrentUserId();
                            boolean success = dashboardCommonLogic.hideCalendarItem(sakaiUserId,
                                    calendarItemId);
                            dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_HIDE,
                                    "/dashboard/calendar/" + selectedCalendarTab + "/" + calendarItemId);

                            // if success adjust UI, else report failure?
                            if (success) {
                                ResourceLoader rl = new ResourceLoader("dash_entity");
                                //renderItemCounter(calendarLinksDiv, calendarDataView); 
                                target.addComponent(CalendarLinksPanel.this);

                                CalendarItem changedItem = dashboardCommonLogic.getCalendarItem(calendarItemId);
                                JsonHelper jsonHelper = new JsonHelper(dashboardCommonLogic, dashboardConfig);
                                String jsonStr = jsonHelper.getJsonObjectFromCalendarItem(changedItem)
                                        .toString();
                                String javascript = "reportSuccess('" + rl.getString("dash.ajax.hide.success")
                                        + "'," + jsonStr + ",'" + "not-sure-about-url-yet" + "');";
                                target.appendJavascript(javascript);
                                target.appendJavascript("resizeFrame('grow');");
                                target.appendJavascript("$('#schedPanel').focus();");
                            }
                        }

                    };
                    hidingAction.setDefaultModel(item.getModel());

                    //actionHideThisLink.setModelObject(cItem);
                    item.add(hidingAction);
                    Image hidingActionIcon = new Image("hidingActionIcon");
                    hidingActionIcon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            return dashboardConfig.getActionIcon(dashboardConfig.ACTION_HIDE);
                        }

                    }));
                    hidingActionIcon.add(new AttributeModifier("alt", true, new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            ResourceLoader rl = new ResourceLoader("dash_entity");
                            return rl.getString("dash.hide");
                        }

                    }));
                    hidingAction.add(hidingActionIcon);
                    //hidingAction.add(new Label("hidingActionLabel", "Hide"));

                    if (cLink.isSticky() || TAB_ID_PAST.equals(selectedCalendarTab)) {
                        hidingAction.setVisible(false);
                        hidingAction.setVisibilityAllowed(false);
                    }

                }

            }
        }
    };
    calendarDataView.setItemReuseStrategy(new DefaultItemReuseStrategy());
    calendarDataView.setItemsPerPage(pageSize);
    haveLinks.add(calendarDataView);

    IPagingLabelProvider pagingLabelProvider = new IPagingLabelProvider() {

        public String getPageLabel(int page) {
            ResourceLoader rl = new ResourceLoader("dash_entity");

            int itemCount = 0;
            String pagerStatus = "";
            if (calendarDataView != null) {
                int first = 0;
                int last = 0;
                itemCount = calendarDataView.getItemCount();
                int pageSize = calendarDataView.getItemsPerPage();
                if (itemCount > pageSize) {
                    //int page = calendarDataView.getCurrentPage();
                    first = page * pageSize + 1;
                    last = Math.min(itemCount, (page + 1) * pageSize);
                    if (first == last) {
                        pagerStatus = Integer.toString(first);
                    } else {
                        pagerStatus = rl.getFormattedMessage("dash.pager.range",
                                new Object[] { new Integer(first), new Integer(last) });
                    }
                } else if (itemCount > 1) {
                    pagerStatus = rl.getFormattedMessage("dash.pager.range",
                            new Object[] { new Integer(1), new Integer(itemCount) });
                } else if (itemCount > 0) {
                    pagerStatus = "1";
                } else {
                    pagerStatus = "0";
                }
            }
            if (logger.isDebugEnabled()) {
                logger.debug("getPageLabel() " + pagerStatus);
            }
            return pagerStatus;
        }
    };
    //add a pager to our table, only visible if we have more than 5 items
    calendarLinksDiv.add(new PagingNavigator("calendarNavigator", calendarDataView, pagingLabelProvider) {

        protected int currentPage = 1;

        @Override
        public boolean isVisible() {
            if (calendarLinksProvider != null && calendarLinksProvider.size() > pageSize) {
                return true;
            }
            return false;
        }

        @Override
        public void onBeforeRender() {
            super.onBeforeRender();

            if (this.getPageable().getCurrentPage() != currentPage) {
                dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_PAGING,
                        "/dashboard/calendar/" + selectedCalendarTab);
                currentPage = this.getPageable().getCurrentPage();
            }

            //renderItemCounter(calendarLinksDiv, (DataView<CalendarLink>) getPageable()); 

            //clear the feedback panel messages
            //clearFeedback(feedbackPanel);
        }

    });

    WebMarkupContainer haveNoLinks = new WebMarkupContainer("haveNoLinks");
    calendarLinksDiv.add(haveNoLinks);

    String noCalendarLinksLabel = null;
    if (TAB_ID_UPCOMING.equals(selectedCalendarTab)) {
        noCalendarLinksLabel = rl.getString("dash.calendar.noupcoming");
    } else if (TAB_ID_PAST.equals(selectedCalendarTab)) {
        noCalendarLinksLabel = rl.getString("dash.calendar.nopast");
    } else if (TAB_ID_STARRED.equals(selectedCalendarTab)) {
        noCalendarLinksLabel = rl.getString("dash.calendar.nostarred");
    } else if (TAB_ID_HIDDEN.equals(selectedCalendarTab)) {
        noCalendarLinksLabel = rl.getString("dash.calendar.nohidden");
    }
    haveNoLinks.add(new Label("message", noCalendarLinksLabel));

    //renderItemCounter(calendarLinksDiv, calendarDataView); 

    int itemCount = 0;
    if (calendarDataView != null) {
        itemCount = calendarDataView.getItemCount();
    }

    if (itemCount > 0) {
        // show the haveLinks
        haveLinks.setVisible(true);
        // hide the haveNoLinks
        haveNoLinks.setVisible(false);
    } else {
        // show the haveNoLinks
        haveNoLinks.setVisible(true);
        // hide the haveLinks
        haveLinks.setVisible(false);
    }
}

From source file:org.sakaiproject.dash.tool.panels.NewsLinksPanel.java

License:Educational Community License

protected void initPanel() {

    if (this.selectedNewsTab == null) {
        this.selectedNewsTab = TAB_ID_CURRENT;
    }/* w w w  . jav a  2s .c  o m*/

    if (this.newsLinksDivId != null) {
        this.remove(newsLinksDivId);
    }

    ResourceLoader rl = new ResourceLoader("dash_entity");

    //get list of items from db, wrapped in a dataprovider
    newsLinksProvider = new NewsLinksDataProvider(this.selectedNewsTab);

    final WebMarkupContainer newsLinksDiv = new WebMarkupContainer("newsLinksDiv");
    newsLinksDiv.setOutputMarkupId(true);
    add(newsLinksDiv);
    this.newsLinksDivId = newsLinksDiv.getId();

    newsLinksDiv.add(new Label("newsTitle", rl.getString("dash.news.title")));

    AjaxLink<IModel<List<NewsLink>>> currentNewsLink = new AjaxLink<IModel<List<NewsLink>>>("link") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            if (logger.isDebugEnabled()) {
                logger.debug("currentNewsLink onClick called");
            }
            // set currentNewsTab to "current"
            selectedNewsTab = TAB_ID_CURRENT;
            // reset news dataview to show current stuff
            if (newsLinksProvider == null) {
                newsLinksProvider = new NewsLinksDataProvider(selectedNewsTab);
            } else {
                newsLinksProvider.setNewsTab(selectedNewsTab);
                dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_TABBING,
                        "/dashboard/news/" + selectedNewsTab);
            }
            initPanel();

            // refresh newsLinksDiv
            target.addComponent(NewsLinksPanel.this);
            target.appendJavascript("resizeFrame('grow');");
            target.appendJavascript("$('#newsPanel').focus();");
        }

    };

    currentNewsLink.add(new Label("label", rl.getString("dash.news.current")));
    WebMarkupContainer currentNewsTab = new WebMarkupContainer("currentNewsTab");
    if (selectedNewsTab == null || TAB_ID_CURRENT.equalsIgnoreCase(selectedNewsTab)) {
        currentNewsTab.add(new SimpleAttributeModifier("class", "activeTab"));
    }
    currentNewsTab.add(currentNewsLink);
    newsLinksDiv.add(currentNewsTab);

    AjaxLink<IModel<List<NewsLink>>> starredNewsLink = new AjaxLink<IModel<List<NewsLink>>>("link") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            if (logger.isDebugEnabled()) {
                logger.debug("starredNewsLink onClick called");
            }
            // set currentNewsTab to "starred"
            selectedNewsTab = TAB_ID_STARRED;
            // reset news dataview to show starred stuff
            if (newsLinksProvider == null) {
                newsLinksProvider = new NewsLinksDataProvider(selectedNewsTab);
            } else {
                newsLinksProvider.setNewsTab(selectedNewsTab);
                dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_TABBING,
                        "/dashboard/news/" + selectedNewsTab);
            }
            initPanel();

            // refresh newsLinksDiv
            target.addComponent(NewsLinksPanel.this);
            target.appendJavascript("resizeFrame('grow');");
            target.appendJavascript("$('#newsPanel').focus();");
        }

    };
    starredNewsLink.add(new Label("label", rl.getString("dash.news.starred")));
    WebMarkupContainer starredNewsTab = new WebMarkupContainer("starredNewsTab");
    if (selectedNewsTab != null && TAB_ID_STARRED.equalsIgnoreCase(selectedNewsTab)) {
        starredNewsTab.add(new SimpleAttributeModifier("class", "activeTab"));
    }
    starredNewsTab.add(starredNewsLink);
    newsLinksDiv.add(starredNewsTab);

    AjaxLink<IModel<List<NewsLink>>> hiddenNewsLink = new AjaxLink<IModel<List<NewsLink>>>("link") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            if (logger.isDebugEnabled()) {
                logger.debug("hiddenNewsLink onClick called");
            }
            // set currentNewsTab to "hidden"
            selectedNewsTab = TAB_ID_HIDDEN;
            // reset news dataview to show hidden stuff
            if (newsLinksProvider == null) {
                newsLinksProvider = new NewsLinksDataProvider(selectedNewsTab);
            } else {
                newsLinksProvider.setNewsTab(selectedNewsTab);
                dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_TABBING,
                        "/dashboard/news/" + selectedNewsTab);
            }
            initPanel();

            // refresh newsLinksDiv
            target.addComponent(NewsLinksPanel.this);
            target.appendJavascript("resizeFrame('grow');");
            target.appendJavascript("$('#newsPanel').focus();");
        }

    };
    hiddenNewsLink.add(new Label("label", rl.getString("dash.news.hidden")));
    WebMarkupContainer hiddenNewsTab = new WebMarkupContainer("hiddenNewsTab");
    if (selectedNewsTab != null && TAB_ID_HIDDEN.equalsIgnoreCase(selectedNewsTab)) {
        hiddenNewsTab.add(new SimpleAttributeModifier("class", "activeTab"));
    }
    hiddenNewsTab.add(hiddenNewsLink);
    newsLinksDiv.add(hiddenNewsTab);

    WebMarkupContainer haveLinks = new WebMarkupContainer("haveLinks");
    newsLinksDiv.add(haveLinks);

    //present the news data in a table
    final DataView<NewsLink> newsDataView = new DataView<NewsLink>("newsLinks", newsLinksProvider) {

        @Override
        public void populateItem(final Item item) {
            item.setOutputMarkupId(true);
            ResourceLoader rl = new ResourceLoader("dash_entity");

            final NewsLink nLink = (NewsLink) item.getModelObject();
            final NewsItem nItem = nLink.getNewsItem();

            if (logger.isDebugEnabled()) {
                logger.debug(this + "populateItem()  item: " + item);
            }

            boolean hideActionLinks = nItem.getItemCount() > 1;

            String itemType = nItem.getSourceType().getIdentifier();
            item.add(new Label("itemType", itemType));
            item.add(new Label("itemCount", Integer.toString(nItem.getItemCount())));
            item.add(new Label("entityReference", nItem.getEntityReference()));

            String siteTitle = nItem.getContext().getContextTitle();
            StringBuilder errorMessages = new StringBuilder();
            String title = FormattedText.processFormattedText(nItem.getTitle(), errorMessages, true, true);
            if (errorMessages != null && errorMessages.length() > 0) {
                logger.warn("Error(s) encountered while processing newsItem title:\n" + errorMessages);
            }

            ExternalLink itemLink = new ExternalLink("itemLink", "#itemEvent");
            itemLink.add(new Label("itemTitle", title));
            itemLink.add(new Label("itemClick", rl.getString("dash.details")));
            item.add(itemLink);

            Image icon = new Image("icon");
            icon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                @Override
                public Object getObject() {
                    // TODO Auto-generated method stub
                    return dashboardCommonLogic.getEntityIconUrl(nItem.getSourceType().getIdentifier(),
                            nItem.getSubtype());
                }

            }));
            item.add(icon);
            String newsItemLabel = dashboardCommonLogic.getString(nItem.getNewsTimeLabelKey(), "", itemType);
            if (newsItemLabel == null || hideActionLinks) {
                newsItemLabel = "";
            }
            Label itemLabel = new Label("itemLabel", newsItemLabel);
            if (!"".equals(newsItemLabel)) {
                itemLabel.add(new SimpleAttributeModifier("class", "itemLabel"));
            }
            item.add(itemLabel);
            item.add(new ExternalLink("siteLink", nItem.getContext().getContextUrl(), siteTitle));
            Component timeLabel = new Label("newsTime", DateUtil.getNewsTimeString(nItem.getNewsTime()));
            timeLabel.add(new AttributeModifier("title", true, new AbstractReadOnlyModel() {

                @Override
                public Object getObject() {
                    // TODO Auto-generated method stub
                    return DateUtil.getFullDateString(nItem.getNewsTime());
                }

            }));
            item.add(timeLabel);

            if (nLink.isSticky()) {
                AjaxLink<NewsLink> starringAction = new AjaxLink<NewsLink>("starringAction") {
                    protected long newsItemId = nItem.getId();
                    protected Component thisRow = item;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        logger.debug("starringAction onClick() called -- unstar ");
                        // need to keep one item
                        logger.debug(newsItemId);
                        //logger.debug(this.getModelObject());

                        String sakaiUserId = sakaiProxy.getCurrentUserId();
                        boolean success = dashboardCommonLogic.unkeepNewsItem(sakaiUserId, newsItemId);
                        dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_UNSTAR,
                                "/dashboard/news/" + selectedNewsTab + "/" + newsItemId);

                        // if success adjust UI, else report failure?
                        if (success) {
                            target.addComponent(NewsLinksPanel.this);
                            if (TAB_ID_STARRED.equals(selectedNewsTab)) {
                                ResourceLoader rl = new ResourceLoader("dash_entity");
                                NewsItem changedItem = dashboardCommonLogic.getNewsItem(newsItemId);
                                JsonHelper jsonHelper = new JsonHelper(dashboardCommonLogic, dashboardConfig);
                                String jsonStr = jsonHelper.getJsonObjectFromNewsItem(changedItem).toString();
                                String javascript = "reportSuccess('" + rl.getString("dash.ajax.unstar.success")
                                        + "'," + jsonStr + ",'" + "not-sure-about-url-yet" + "');";
                                target.appendJavascript(javascript);
                            }
                            target.appendJavascript("resizeFrame('grow');");
                            target.appendJavascript("$('#newsPanel').focus();");
                        }
                    }

                };

                starringAction.setDefaultModel(item.getModel());
                item.add(starringAction);
                Image starringActionIcon = new Image("starringActionIcon");
                starringActionIcon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        return dashboardConfig.getActionIcon(dashboardConfig.ACTION_UNSTAR);
                    }

                }));
                starringActionIcon.add(new AttributeModifier("alt", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        ResourceLoader rl = new ResourceLoader("dash_entity");
                        return rl.getString("dash.unstar");
                    }

                }));
                starringAction.add(starringActionIcon);

                //starringAction.add(new Label("starringActionLabel", "Unstar"));

                if (nLink.isHidden() || hideActionLinks) {
                    starringAction.setVisible(false);
                    starringAction.setVisibilityAllowed(false);
                }
            } else {
                AjaxLink<NewsLink> starringAction = new AjaxLink<NewsLink>("starringAction") {
                    protected long newsItemId = nItem.getId();
                    protected Component thisRow = item;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        logger.debug("starringAction onClick() called -- star ");
                        // need to keep one item
                        logger.debug(newsItemId);
                        //logger.debug(this.getModelObject());

                        String sakaiUserId = sakaiProxy.getCurrentUserId();
                        boolean success = dashboardCommonLogic.keepNewsItem(sakaiUserId, newsItemId);
                        dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_STAR,
                                "/dashboard/news/" + selectedNewsTab + "/" + newsItemId);

                        // if success adjust UI, else report failure?
                        if (success) {
                            target.addComponent(NewsLinksPanel.this);
                            //String javascript = "alert('success. (" + thisRow.getMarkupId() + ")');";
                            //target.appendJavascript(javascript );
                        }
                        target.appendJavascript("resizeFrame('grow');");
                        target.appendJavascript("$('#newsPanel').focus();");
                    }

                };
                Image starringActionIcon = new Image("starringActionIcon");
                starringActionIcon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        return dashboardConfig.getActionIcon(dashboardConfig.ACTION_STAR);
                    }

                }));
                starringActionIcon.add(new AttributeModifier("alt", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        ResourceLoader rl = new ResourceLoader("dash_entity");
                        return rl.getString("dash.star");
                    }

                }));
                starringAction.add(starringActionIcon);
                // starringAction.add(new Label("starringActionLabel", "Star"));
                item.add(starringAction);

                if (nLink.isHidden() || hideActionLinks) {
                    starringAction.setVisible(false);
                    starringAction.setVisibilityAllowed(false);
                }
            }

            if (nLink.isHidden()) {
                AjaxLink<NewsLink> hidingAction = new AjaxLink<NewsLink>("hidingAction") {
                    protected long newsItemId = nItem.getId();
                    protected Component thisRow = item;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        logger.debug("hidingAction onClick() called -- show");
                        // need to trash one item
                        logger.debug(newsItemId);
                        //logger.debug(this.getModelObject());
                        String sakaiUserId = sakaiProxy.getCurrentUserId();
                        boolean success = dashboardCommonLogic.unhideNewsItem(sakaiUserId, newsItemId);
                        dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_SHOW,
                                "/dashboard/news/" + selectedNewsTab + "/" + newsItemId);

                        // if success adjust UI, else report failure?
                        if (success) {
                            ResourceLoader rl = new ResourceLoader("dash_entity");
                            target.addComponent(NewsLinksPanel.this);
                            NewsItem changedItem = dashboardCommonLogic.getNewsItem(newsItemId);
                            JsonHelper jsonHelper = new JsonHelper(dashboardCommonLogic, dashboardConfig);
                            String jsonStr = jsonHelper.getJsonObjectFromNewsItem(changedItem).toString();
                            String javascript = "reportSuccess('" + rl.getString("dash.ajax.show.success")
                                    + "'," + jsonStr + ",'" + "not-sure-about-url-yet" + "');";
                            target.appendJavascript(javascript);
                        }
                        target.appendJavascript("resizeFrame('grow');");
                        target.appendJavascript("$('#newsPanel').focus();");
                    }

                };
                hidingAction.setDefaultModel(item.getModel());
                //actionHideThisLink.setModelObject(nItem);
                item.add(hidingAction);
                Image hidingActionIcon = new Image("hidingActionIcon");
                hidingActionIcon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        return dashboardConfig.getActionIcon(dashboardConfig.ACTION_SHOW);
                    }

                }));
                hidingActionIcon.add(new AttributeModifier("alt", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        ResourceLoader rl = new ResourceLoader("dash_entity");
                        return rl.getString("dash.show");
                    }

                }));
                hidingAction.add(hidingActionIcon);
                //hidingAction.add(new Label("hidingActionLabel", "Show"));

                if (nLink.isSticky() || hideActionLinks) {
                    hidingAction.setVisible(false);
                    hidingAction.setVisibilityAllowed(false);
                }

            } else {
                AjaxLink<NewsLink> hidingAction = new AjaxLink<NewsLink>("hidingAction") {
                    protected long newsItemId = nItem.getId();
                    protected Component thisRow = item;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        logger.debug("hidingAction onClick() called -- hide");
                        // need to trash one item
                        logger.debug(newsItemId);
                        //logger.debug(this.getModelObject());
                        String sakaiUserId = sakaiProxy.getCurrentUserId();
                        boolean success = dashboardCommonLogic.hideNewsItem(sakaiUserId, newsItemId);
                        dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_HIDE,
                                "/dashboard/news/" + selectedNewsTab + "/" + newsItemId);

                        // if success adjust UI, else report failure?
                        if (success) {
                            ResourceLoader rl = new ResourceLoader("dash_entity");
                            target.addComponent(NewsLinksPanel.this);
                            NewsItem changedItem = dashboardCommonLogic.getNewsItem(newsItemId);
                            JsonHelper jsonHelper = new JsonHelper(dashboardCommonLogic, dashboardConfig);
                            String jsonStr = jsonHelper.getJsonObjectFromNewsItem(changedItem).toString();
                            String javascript = "reportSuccess('" + rl.getString("dash.ajax.hide.success")
                                    + "'," + jsonStr + ",'" + "not-sure-about-url-yet" + "');";
                            target.appendJavascript(javascript);
                        }
                        target.appendJavascript("resizeFrame('grow');");
                        target.appendJavascript("$('#newsPanel').focus();");
                    }

                };
                hidingAction.setDefaultModel(item.getModel());

                //actionHideThisLink.setModelObject(nItem);
                item.add(hidingAction);
                Image hidingActionIcon = new Image("hidingActionIcon");
                hidingActionIcon.add(new AttributeModifier("src", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        return dashboardConfig.getActionIcon(dashboardConfig.ACTION_HIDE);
                    }

                }));
                hidingActionIcon.add(new AttributeModifier("alt", true, new AbstractReadOnlyModel() {

                    @Override
                    public Object getObject() {
                        ResourceLoader rl = new ResourceLoader("dash_entity");
                        return rl.getString("dash.hide");
                    }

                }));
                hidingAction.add(hidingActionIcon);
                //hidingAction.add(new Label("hidingActionLabel", "Hide"));

                if (nLink.isSticky() || hideActionLinks) {
                    hidingAction.setVisible(false);
                    hidingAction.setVisibilityAllowed(false);
                }

            }
        }
    };

    newsDataView.setItemReuseStrategy(new DefaultItemReuseStrategy());
    newsDataView.setItemsPerPage(pageSize);
    haveLinks.add(newsDataView);

    IPagingLabelProvider pagingLabelProvider = new IPagingLabelProvider() {

        public String getPageLabel(int page) {
            ResourceLoader rl = new ResourceLoader("dash_entity");

            int itemCount = 0;
            String pagerStatus = "";
            if (newsDataView != null) {
                int first = 0;
                int last = 0;
                itemCount = newsDataView.getItemCount();
                int pageSize = newsDataView.getItemsPerPage();
                if (itemCount > pageSize) {
                    //int page = calendarDataView.getCurrentPage();
                    first = page * pageSize + 1;
                    last = Math.min(itemCount, (page + 1) * pageSize);
                    if (first == last) {
                        pagerStatus = Integer.toString(first);
                    } else {
                        pagerStatus = rl.getFormattedMessage("dash.pager.range",
                                new Object[] { new Integer(first), new Integer(last) });
                    }
                } else if (itemCount > 1) {
                    pagerStatus = rl.getFormattedMessage("dash.pager.range",
                            new Object[] { new Integer(1), new Integer(itemCount) });
                } else if (itemCount > 0) {
                    pagerStatus = "1";
                } else {
                    pagerStatus = "0";
                }
            }
            if (logger.isDebugEnabled()) {
                logger.debug("getPageLabel() " + pagerStatus);
            }
            return pagerStatus;
        }
    };

    //add a pager to our table, only visible if we have more than 5 items
    newsLinksDiv.add(new PagingNavigator("newsNavigator", newsDataView, pagingLabelProvider) {

        protected int currentPage = 1;

        @Override
        public boolean isVisible() {
            if (newsLinksProvider.size() > pageSize) {
                return true;
            }
            return false;
        }

        @Override
        public void onBeforeRender() {

            if (this.getPageable().getCurrentPage() != currentPage) {
                dashboardCommonLogic.recordDashboardActivity(DashboardCommonLogic.EVENT_DASH_PAGING,
                        "/dashboard/news/" + selectedNewsTab);
                currentPage = this.getPageable().getCurrentPage();
            }

            //renderItemCounter(newsLinksDiv, newsDataView);

            //clear the feedback panel messages
            //clearFeedback(feedbackPanel);
            super.onBeforeRender();
        }

    });

    WebMarkupContainer haveNoLinks = new WebMarkupContainer("haveNoLinks");
    newsLinksDiv.add(haveNoLinks);

    String noNewsLinksLabel = null;
    if (TAB_ID_CURRENT.equals(selectedNewsTab)) {
        noNewsLinksLabel = rl.getString("dash.news.nocurrent");
    } else if (TAB_ID_STARRED.equals(selectedNewsTab)) {
        noNewsLinksLabel = rl.getString("dash.news.nostarred");
    } else if (TAB_ID_HIDDEN.equals(selectedNewsTab)) {
        noNewsLinksLabel = rl.getString("dash.news.nohidden");
    }
    haveNoLinks.add(new Label("message", noNewsLinksLabel));

    //renderItemCounter(newsLinksDiv, newsDataView);
    int itemCount = 0;
    if (newsDataView != null) {
        itemCount = newsDataView.getItemCount();
    }

    if (itemCount > 0) {
        // show the haveLinks
        haveLinks.setVisible(true);
        // hide the noNewsLinksDiv
        haveNoLinks.setVisible(false);
    } else {
        // show the noNewsLinksDiv
        haveNoLinks.setVisible(true);
        // hide the haveLinks
        haveLinks.setVisible(false);
    }

}