Example usage for org.apache.wicket.markup.repeater.data DataView DataView

List of usage examples for org.apache.wicket.markup.repeater.data DataView DataView

Introduction

In this page you can find the example usage for org.apache.wicket.markup.repeater.data DataView DataView.

Prototype

protected DataView(String id, IDataProvider<T> dataProvider) 

Source Link

Usage

From source file:org.sakaiproject.ddo.tool.pages.ArchivePage.java

License:Educational Community License

public ArchivePage() {
    disableLink(archivePageLink);//w w w.j  a  va 2s  .co m

    // Add a link to refresh the tables on the page
    Link<Void> refreshPage = new Link<Void>("refreshPage") {
        public void onClick() {
            setResponsePage(new ArchivePage());
        }
    };
    add(refreshPage);

    add(new Label("restore-header", getString("table.header.restore")).setVisible(sakaiProxy.isDDOAdmin()));

    //get list of items from db, wrapped in a dataprovider
    submissionDataProvider = new SubmissionDataProvider(SubmissionListType.ALL_ARCHIVED);

    //present the reviewed data in a table
    final DataView<Submission> dataViewArchived = new DataView<Submission>("archived", submissionDataProvider) {

        @Override
        public void populateItem(final Item item) {

            DateFormat df = new SimpleDateFormat("MMM d, yyyy h:mm a");

            final Submission submission = (Submission) item.getModelObject();
            final String submissionStatus = submission.getStatus();
            item.add(new Label("submittedBy", sakaiProxy.getUserDisplayName(submission.getSubmittedBy())));
            item.add(new Label("username", sakaiProxy.getUserDisplayId(submission.getSubmittedBy())));
            item.add(new Label("submissiondate", df.format(submission.getSubmissionDate())));
            item.add(new Label("status", submissionStatus));
            Link<Void> feedback;
            Label feedbackLabel;
            Link<Void> editFeedback;
            Label editFeedbackLabel;
            final List<Feedback> feedbackList = projectLogic
                    .getFeedbackForSubmission(submission.getSubmissionId());
            if (feedbackList != null && !feedbackList.isEmpty()) {
                Feedback f = feedbackList.get(0);
                final long feedbackId = f.getFeedbackId();
                item.add(new Label("reviewedBy", sakaiProxy.getUserDisplayName(f.getReviewedBy())));
                item.add(new Label("reviewDate", df.format(f.getReviewDate())));
                feedback = new Link<Void>("feedback") {
                    @Override
                    public void onClick() {
                        setResponsePage(new FeedbackPage(feedbackId, "staff"));
                    }
                };
                editFeedback = new Link<Void>("editFeedback") {
                    @Override
                    public void onClick() {
                        setResponsePage(new EditFeedback(feedbackId));
                    }
                };
                feedbackLabel = new Label("feedbackLabel", "View");
                editFeedbackLabel = new Label("editFeedbackLabel", "Edit");
            } else {
                item.add(new Label("reviewedBy", ""));
                item.add(new Label("reviewDate", ""));
                feedback = new Link<Void>("feedback") {
                    @Override
                    public void onClick() {
                    }
                };
                editFeedback = new Link<Void>("editFeedback") {
                    @Override
                    public void onClick() {
                    }
                };
                feedbackLabel = new Label("feedbackLabel", "");
                editFeedbackLabel = new Label("editFeedbackLabel", "");
            }
            feedback.add(feedbackLabel);
            item.add(feedback);
            editFeedback.add(editFeedbackLabel);
            item.add(editFeedback);
            Link<Void> streamDownloadLink = new Link<Void>("document") {

                @Override
                public void onClick() {

                    AbstractResourceStreamWriter rstream = new AbstractResourceStreamWriter() {

                        @Override
                        public void write(OutputStream output) throws IOException {
                            output.write(sakaiProxy.getResource(submission.getDocumentRef()).getBytes());
                        }
                    };

                    ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(rstream,
                            sakaiProxy.getResource(submission.getDocumentRef()).getFileName());
                    getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
                }
            };

            item.add(streamDownloadLink);
            SubmissionFile sf = sakaiProxy.getResource(submission.getDocumentRef());
            streamDownloadLink.add(new Label("fileName", sf == null ? "Cannot find file." : sf.getFileName()));
            item.add(new ContextImage("submissionIcon",
                    new Model<String>(sakaiProxy.getResourceIconUrl(submission.getDocumentRef()))));
            item.add(new Label("fileSize", sakaiProxy.getResourceFileSize(submission.getDocumentRef())));
            // Restore link
            Link<Void> restoreLink = new Link<Void>("restore-link") {
                @Override
                public void onClick() {
                    submission.setStatus(Submission.STATUS_REVIEWED);
                    if (projectLogic.updateSubmissionStatus(submission)) {
                        getSession().info(getString("success.restored_submission"));
                        setResponsePage(new ArchivePage());
                    } else {
                        error(getString("error.restored_submission"));
                    }
                }
            };
            item.add(restoreLink);
            restoreLink.setVisible(sakaiProxy.isDDOAdmin());
        }
    };
    dataViewArchived.setItemReuseStrategy(new DefaultItemReuseStrategy());
    dataViewArchived.setItemsPerPage(7);
    add(dataViewArchived);

    add(new Label("reviewedHeader",
            MessageFormat.format(getString("archive.reviews.header"), submissionDataProvider.size())));

    //add a pager to our table, only visible if we have more than 5 items
    add(new PagingNavigator("archivedNavigator", dataViewArchived) {

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

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

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

From source file:org.sakaiproject.ddo.tool.pages.StaffOverview.java

License:Educational Community License

public StaffOverview() {
    disableLink(staffOverviewLink);//from   w  w w  .  ja  v  a  2  s  .  c om

    // Add a link to refresh the tables on the page
    Link<Void> refreshPage = new Link<Void>("refreshPage") {
        public void onClick() {
            setResponsePage(new StaffOverview());
        }
    };
    add(refreshPage);

    //get list of items from db, wrapped in a dataprovider
    waitingProvider = new SubmissionDataProvider(SubmissionListType.ALL_AWAITING);

    //present the data in a table
    final DataView<Submission> dataView = new DataView<Submission>("awaitingReview", waitingProvider) {

        @Override
        public void populateItem(final Item item) {

            DateFormat df = new SimpleDateFormat("MMM d, yyyy h:mm a");

            final Submission submission = (Submission) item.getModelObject();
            String submissionStatus = submission.getStatus();
            item.add(new Label("submittedBy", sakaiProxy.getUserDisplayName(submission.getSubmittedBy())));
            item.add(new Label("username", sakaiProxy.getUserDisplayId(submission.getSubmittedBy())));
            item.add(new Label("submissiondate", df.format(submission.getSubmissionDate())));
            item.add(new Label("status", submissionStatus));
            Link<Void> startReviewing;
            Label startReviewingLabel;
            if (submissionStatus != null && Submission.STATUS_WAITING.equals(submissionStatus)) {
                final long submissionId = submission.getSubmissionId();
                startReviewing = new Link<Void>("startReviewing") {
                    @Override
                    public void onClick() {
                        setResponsePage(new FeedbackFormPage(submissionId));
                    }
                };
                startReviewingLabel = new Label("startReviewingLabel",
                        new ResourceModel("link.start_reviewing"));
            } else {
                final long submissionId = submission.getSubmissionId();
                startReviewing = new Link<Void>("startReviewing") {
                    @Override
                    public void onClick() {
                        getSession().warn(getString("warn.under_review"));
                        setResponsePage(new FeedbackFormPage(submissionId));
                    }
                };
                startReviewingLabel = new Label("startReviewingLabel", Submission.STATUS_UNDER);
            }
            startReviewing.add(startReviewingLabel);
            item.add(startReviewing);
            Link<Void> streamDownloadLink = new Link<Void>("document") {

                @Override
                public void onClick() {

                    AbstractResourceStreamWriter rstream = new AbstractResourceStreamWriter() {

                        @Override
                        public void write(OutputStream output) throws IOException {
                            output.write(sakaiProxy.getResource(submission.getDocumentRef()).getBytes());
                        }
                    };

                    ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(rstream,
                            sakaiProxy.getResource(submission.getDocumentRef()).getFileName());
                    getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
                }
            };

            item.add(streamDownloadLink);
            SubmissionFile sf = sakaiProxy.getResource(submission.getDocumentRef());
            streamDownloadLink.add(new Label("fileName", sf == null ? "Cannot find file" : sf.getFileName()));
            item.add(new ContextImage("submissionIcon",
                    new Model<String>(sakaiProxy.getResourceIconUrl(submission.getDocumentRef()))));
            item.add(new Label("fileSize", sakaiProxy.getResourceFileSize(submission.getDocumentRef())));
        }
    };
    dataView.setItemReuseStrategy(new DefaultItemReuseStrategy());
    dataView.setItemsPerPage(10);
    add(dataView);
    add(new Label("waitingHeader",
            MessageFormat.format(getString("staff.overview.waiting.header"), waitingProvider.size())));

    //add a pager to our table, only visible if we have more than 5 items
    add(new PagingNavigator("navigator", dataView) {

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

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

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

    // Archive All link
    Link<Void> archiveAllLink = new Link<Void>("archive-all-link") {
        @Override
        public void onClick() {
            if (projectLogic.archiveAllReviewedSubmissions()) {
                getSession().info(getString("success.all_archived_submission"));
                setResponsePage(new StaffOverview());
            } else {
                getSession().error(getString("error.all_archived_submission"));
                setResponsePage(new StaffOverview());
            }
        }
    };
    archiveAllLink.setVisible(sakaiProxy.isDDOAdmin());
    add(archiveAllLink);

    //get list of items from db, wrapped in a dataprovider
    reviewedProvider = new SubmissionDataProvider(SubmissionListType.ALL_REVIEWED);

    //present the reviewed data in a table
    final DataView<Submission> dataViewReviewed = new DataView<Submission>("reviewed", reviewedProvider) {

        @Override
        public void populateItem(final Item item) {

            DateFormat df = new SimpleDateFormat("MMM d, yyyy h:mm a");

            final Submission submission = (Submission) item.getModelObject();
            final String submissionStatus = submission.getStatus();
            item.add(new Label("submittedBy", sakaiProxy.getUserDisplayName(submission.getSubmittedBy())));
            item.add(new Label("username", sakaiProxy.getUserDisplayId(submission.getSubmittedBy())));
            item.add(new Label("submissiondate", df.format(submission.getSubmissionDate())));
            item.add(new Label("status", submissionStatus));
            Link<Void> feedback;
            Label feedbackLabel;
            Link<Void> editFeedback;
            Label editFeedbackLabel;
            final List<Feedback> feedbackList = projectLogic
                    .getFeedbackForSubmission(submission.getSubmissionId());
            if (feedbackList != null && !feedbackList.isEmpty()) {
                Feedback f = feedbackList.get(0);
                final long feedbackId = f.getFeedbackId();
                item.add(new Label("reviewedBy", sakaiProxy.getUserDisplayName(f.getReviewedBy())));
                item.add(new Label("reviewDate", df.format(f.getReviewDate())));
                feedback = new Link<Void>("feedback") {
                    @Override
                    public void onClick() {
                        setResponsePage(new FeedbackPage(feedbackId, "staff"));
                    }
                };
                editFeedback = new Link<Void>("editFeedback") {
                    @Override
                    public void onClick() {
                        setResponsePage(new EditFeedback(feedbackId));
                    }
                };
                feedbackLabel = new Label("feedbackLabel", "View");
                editFeedbackLabel = new Label("editFeedbackLabel", "Edit");
            } else {
                item.add(new Label("reviewedBy", ""));
                item.add(new Label("reviewDate", ""));
                feedback = new Link<Void>("feedback") {
                    @Override
                    public void onClick() {
                    }
                };
                editFeedback = new Link<Void>("editFeedback") {
                    @Override
                    public void onClick() {
                    }
                };
                feedbackLabel = new Label("feedbackLabel", "");
                editFeedbackLabel = new Label("editFeedbackLabel", "");
            }
            feedback.add(feedbackLabel);
            item.add(feedback);
            editFeedback.add(editFeedbackLabel);
            item.add(editFeedback);
            Link<Void> streamDownloadLink = new Link<Void>("document") {

                @Override
                public void onClick() {

                    AbstractResourceStreamWriter rstream = new AbstractResourceStreamWriter() {

                        @Override
                        public void write(OutputStream output) throws IOException {
                            output.write(sakaiProxy.getResource(submission.getDocumentRef()).getBytes());
                        }
                    };

                    ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(rstream,
                            sakaiProxy.getResource(submission.getDocumentRef()).getFileName());
                    getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
                }
            };

            item.add(streamDownloadLink);
            SubmissionFile sf = sakaiProxy.getResource(submission.getDocumentRef());
            streamDownloadLink.add(new Label("fileName", sf == null ? "Cannot find file." : sf.getFileName()));
            item.add(new ContextImage("submissionIcon",
                    new Model<String>(sakaiProxy.getResourceIconUrl(submission.getDocumentRef()))));
            item.add(new Label("fileSize", sakaiProxy.getResourceFileSize(submission.getDocumentRef())));
            // Archive link
            Link<Void> archiveLink = new Link<Void>("archive-link") {
                @Override
                public void onClick() {
                    submission.setStatus(Submission.STATUS_ARCHIVED);
                    if (projectLogic.updateSubmissionStatus(submission)) {
                        getSession().info(getString("success.archived_submission"));
                        setResponsePage(new StaffOverview());
                    } else {
                        error(getString("error.archived_submission"));
                    }
                }
            };
            item.add(archiveLink);
            archiveLink.setVisible(sakaiProxy.isDDOAdmin());
        }
    };
    dataViewReviewed.setItemReuseStrategy(new DefaultItemReuseStrategy());
    dataViewReviewed.setItemsPerPage(7);
    add(dataViewReviewed);

    add(new Label("completedHeader",
            MessageFormat.format(getString("staff.overview.completed.header"), reviewedProvider.size())));

    //add a pager to our table, only visible if we have more than 5 items
    add(new PagingNavigator("reviewedNavigator", dataViewReviewed) {

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

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

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

From source file:org.sakaiproject.ddo.tool.pages.StudentOverview.java

License:Educational Community License

public StudentOverview() {
    disableLink(studentOverviewLink);/*  ww  w  .  j a v a  2s  . com*/

    //link to drop off form
    //the i18n label for this is directly in the HTML
    Link<Void> toDropOffFormLink = new Link<Void>("toDropOffFormLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            setResponsePage(new DropOffForm());
        }

        @Override
        public boolean isEnabled() {
            return !sakaiProxy.isDDOClosed();
        }

        @Override
        public boolean isVisible() {
            return !sakaiProxy.isDDOClosed();
        }
    };
    add(toDropOffFormLink);

    Label closedMessage = new Label("dropOffClosedMessage", sakaiProxy.getDDOClosedMessage());
    closedMessage.setVisible(sakaiProxy.isDDOClosed());
    add(closedMessage);

    //get list of items from db, wrapped in a dataprovider
    provider = new SubmissionDataProvider(SubmissionListType.FOR_CURRENT_USER);

    //present the data in a table
    final DataView<Submission> dataView = new DataView<Submission>("simple", provider) {

        @Override
        public void populateItem(final Item item) {

            DateFormat df = new SimpleDateFormat("MMM d, yyyy h:mm a");

            final Submission submission = (Submission) item.getModelObject();

            Link<Void> feedback;
            Label feedbackLabel;
            final List<Feedback> feedbackList = projectLogic
                    .getFeedbackForSubmission(submission.getSubmissionId());
            if (feedbackList != null && !feedbackList.isEmpty()) {
                final long feedbackId = feedbackList.get(0).getFeedbackId();
                feedback = new Link<Void>("feedback") {
                    @Override
                    public void onClick() {
                        setResponsePage(new FeedbackPage(feedbackId, "student"));
                    }
                };
                feedbackLabel = new Label("feedbackLabel", new ResourceModel("link.view_feedback"));
            } else {
                feedback = new Link<Void>("feedback") {
                    @Override
                    public void onClick() {
                    }
                };
                feedbackLabel = new Label("feedbackLabel", "");
            }
            feedback.add(feedbackLabel);
            item.add(feedback);

            Link<Void> streamDownloadLink = new Link<Void>("document") {

                @Override
                public void onClick() {

                    AbstractResourceStreamWriter rstream = new AbstractResourceStreamWriter() {

                        @Override
                        public void write(OutputStream output) throws IOException {
                            output.write(sakaiProxy.getResource(submission.getDocumentRef()).getBytes());
                        }
                    };

                    ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(rstream,
                            sakaiProxy.getResource(submission.getDocumentRef()).getFileName());
                    getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
                }
            };

            item.add(streamDownloadLink);
            SubmissionFile sf = sakaiProxy.getResource(submission.getDocumentRef());
            streamDownloadLink.add(new Label("fileName", sf == null ? "Cannot find file" : sf.getFileName()));
            item.add(new ContextImage("submissionIcon",
                    new Model<String>(sakaiProxy.getResourceIconUrl(submission.getDocumentRef()))));
            item.add(new Label("fileSize", sakaiProxy.getResourceFileSize(submission.getDocumentRef())));
            item.add(new Label("submissiondate", df.format(submission.getSubmissionDate())));
            item.add(new Label("status", submission.getStatus()));
        }
    };
    dataView.setItemReuseStrategy(new DefaultItemReuseStrategy());
    dataView.setItemsPerPage(15);
    add(dataView);

    //add a pager to our table, only visible if we have more than 5 items
    add(new PagingNavigator("navigator", dataView) {

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

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

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

    add(new Label("studentSubmissionsHeader",
            MessageFormat.format(getString("student.overview.submissions.header"), provider.size()))
                    .setEscapeModelStrings(false));

    WebMarkupContainer submissionQueueInfo = new WebMarkupContainer("submissionQueueInfo");

    int numberOfWaitingSubmissions = projectLogic.getNumberOfWaitingSubmissions();

    submissionQueueInfo.add(new Label("numberWaitingReview",
            MessageFormat.format(getString("activity.number.waiting"), numberOfWaitingSubmissions))
                    .setEscapeModelStrings(false));

    submissionQueueInfo.add(new Label("expectedWaitTime", MessageFormat.format(getString("activity.wait.time"),
            getExpectedWaitTime(numberOfWaitingSubmissions), getExpectedReturnDay(numberOfWaitingSubmissions)))
                    .setEscapeModelStrings(false));

    add(submissionQueueInfo);
}

From source file:org.sakaiproject.delegatedaccess.tool.pages.SearchAccessPage.java

License:Educational Community License

private void main() {
    disableLink(searchAccessLink);/*from w  w w .  j  a  v  a  2 s  .co  m*/

    final AbstractReadOnlyModel resultModel = new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            if (firstLoad) {
                return "";
            } else {
                if (provider.getData().size() == 0) {
                    if (searchTypeEid.equals(selectedSearchType)) {
                        if (eid == null || "".equals(eid.trim())) {
                            return new StringResourceModel("noEidEntered", null).getObject();
                        } else {
                            User u = getUser();
                            if (u == null) {
                                return new StringResourceModel("eidDoesNotExist", null).getObject();
                            } else {
                                return new StringResourceModel("noResultsUser", null).getObject();
                            }
                        }
                    } else {
                        return new StringResourceModel("noResultsHierarchy", null).getObject();
                    }
                } else {
                    return "";
                }
            }
        }

    };
    add(new Label("resultInfo", resultModel) {
        @Override
        public boolean isVisible() {
            return !"".equals(resultModel.getObject());
        }
    });

    //create form
    final Form<?> form = new Form("form") {
        protected void onSubmit() {
            super.onSubmit();
            firstLoad = false;
            if (provider != null) {
                provider.detachManually();
            }
        }
    };
    form.setOutputMarkupId(true);

    //search by label:
    form.add(new Label("searchByLabel", new StringResourceModel("searchByLabel", null)));

    //setup radio buttons for search type:
    final RadioGroup group = new RadioGroup("searchGroup",
            new PropertyModel<String>(this, "selectedSearchType"));

    final Radio hierarchyRadio = new Radio("searchByHierarchy", new Model<String>(searchTypeHierarchy));
    FormComponentLabel hierarchyLabel = new FormComponentLabel("searchByHierarchyLabel", hierarchyRadio);
    hierarchyLabel.add(
            new Label("searchByHierarchyLabelText", new StringResourceModel("searchByHierarchyLabel", null)));
    group.add(hierarchyRadio);
    group.add(hierarchyLabel);
    group.add(hierarchyRadio.add(new AjaxEventBehavior("onchange") {
        @Override
        protected void onEvent(AjaxRequestTarget arg0) {
            selectedSearchType = searchTypeHierarchy;
        }
    }));

    Radio eidRadio = new Radio("searchByEid", new Model<String>(searchTypeEid));
    FormComponentLabel eidRadioLabel = new FormComponentLabel("searchByEidLabel", eidRadio);
    eidRadioLabel.add(new Label("searchByEidLabelText", new StringResourceModel("searchByEidLabel", null)));
    group.add(eidRadio);
    group.add(eidRadioLabel);
    group.add(eidRadio.add(new AjaxEventBehavior("onchange") {
        @Override
        protected void onEvent(AjaxRequestTarget arg0) {
            selectedSearchType = searchTypeEid;
        }
    }));

    form.add(group);

    //input for hierarchy fields:
    WebMarkupContainer hierarchyDiv = new WebMarkupContainer("hierarchyFields") {
        @Override
        protected void onComponentTag(ComponentTag tag) {
            if (!selectedSearchType.equals(searchTypeHierarchy)) {
                //set to hidden
                tag.put("style", "display:none");
            }
        }
    };
    final Comparator<SelectOption> optionComparator = new SelectOptionComparator();
    if (hierarchySelectOptions == null || hierarchySelectOptions.size() == 0) {
        hierarchySelectOptions = new HashMap<String, List<SelectOption>>();
        HierarchyNodeSerialized rootNode = projectLogic.getRootNodeId();
        nodeSelects = new HashMap<String, SelectOption>();
        nodeSelectOrder = new ArrayList<String>();
        if (rootNode != null && rootNode.id != null && !"".equals(rootNode.id)) {
            Set<HierarchyNodeSerialized> nodes = projectLogic.getDirectNodes(rootNode.id);
            List<SelectOption> options = new ArrayList<SelectOption>();
            if (nodes != null) {
                for (HierarchyNodeSerialized node : nodes) {
                    options.add(new SelectOption(node.description, node.id));
                }
            }
            Collections.sort(options, optionComparator);
            hierarchySelectOptions.put(rootNode.id, options);

            //since nothing is selected, set the node selection to null
            nodeSelects.put(rootNode.id, null);
            //add the root node as the first selection            
            nodeSelectOrder.add(rootNode.id);
        }
    }
    final ChoiceRenderer choiceRenderer = new ChoiceRenderer("label", "value");
    DataView dropdowns = new DataView("hierarchyDropdowns", new IDataProvider<String>() {

        @Override
        public void detach() {

        }

        @Override
        public Iterator<? extends String> iterator(int first, int count) {
            return nodeSelectOrder.subList(first, first + count).iterator();
        }

        @Override
        public IModel<String> model(final String arg0) {
            return new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return arg0;
                }
            };
        }

        @Override
        public int size() {
            return nodeSelectOrder.size();
        }

    }) {

        @Override
        protected void populateItem(Item item) {
            final String itemNodeId = item.getModelObject().toString();
            final DropDownChoice choice = new DropDownChoice("hierarchyLevel", new NodeSelectModel(itemNodeId),
                    hierarchySelectOptions.get(itemNodeId), choiceRenderer);
            //keeps the null option (choose one) after a user selects an option
            choice.setNullValid(true);
            choice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                protected void onUpdate(AjaxRequestTarget target) {
                    List<String> newOrder = new ArrayList<String>();
                    for (String nodeId : nodeSelectOrder) {
                        newOrder.add(nodeId);
                        if (nodeId.equals(itemNodeId)) {
                            break;
                        }
                    }
                    if (choice.getModelObject() != null
                            && !"".equals(((SelectOption) choice.getModelObject()).getValue())) {
                        String value = ((SelectOption) choice.getModelObject()).getValue();
                        //check if options list exist for newly selected node
                        if (!hierarchySelectOptions.containsKey(value)) {
                            Set<HierarchyNodeSerialized> nodes = projectLogic.getDirectNodes(value);
                            List<SelectOption> options = new ArrayList<SelectOption>();
                            if (nodes != null) {
                                for (HierarchyNodeSerialized node : nodes) {
                                    options.add(new SelectOption(node.description, node.id));
                                }
                                Collections.sort(options, optionComparator);
                            }
                            hierarchySelectOptions.put(value, options);
                        }
                        //check to see if there are any additional direct children, or if
                        //this is the last node
                        if (hierarchySelectOptions.containsKey(value)
                                && hierarchySelectOptions.get(value).size() > 0) {
                            //update node select order
                            newOrder.add(value);
                        }
                    }
                    nodeSelectOrder = newOrder;
                    //refresh everything:
                    target.addComponent(form);
                }
            });
            item.add(choice);
        }

    };
    hierarchyDiv.add(dropdowns);

    //include lower perms checkbox:
    CheckBox checkbox = new CheckBox("includeLowerPerms", new PropertyModel(this, "includeLowerPerms"));
    FormComponentLabel checkboxLabel = new FormComponentLabel("includeLowerPermsLabel", checkbox);
    checkboxLabel.add(
            new Label("includeLowerPermsLabelText", new StringResourceModel("includeLowerPermsLabel", null)));
    hierarchyDiv.add(checkboxLabel);
    hierarchyDiv.add(checkbox);

    form.add(hierarchyDiv);

    //input for eid fields:
    WebMarkupContainer eidDiv = new WebMarkupContainer("eidFields") {
        @Override
        protected void onComponentTag(ComponentTag tag) {
            if (!selectedSearchType.equals(searchTypeEid)) {
                //set to hidden
                tag.put("style", "display:none");
            }
        }
    };
    final PropertyModel<String> eidModel = new PropertyModel<String>(this, "eid");
    TextField<String> eidText = new TextField<String>("eid", eidModel);
    eidDiv.add(eidText);

    form.add(eidDiv);

    add(form);

    //Display Results:

    //Headers:
    Link<Void> userIdSort = new Link<Void>("userIdSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_EID);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0 && searchTypeHierarchy.equals(selectedSearchType);
        }
    };
    add(userIdSort);
    Link<Void> nameSort = new Link<Void>("nameSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_SORT_NAME);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0 && searchTypeHierarchy.equals(selectedSearchType);
        }
    };
    add(nameSort);
    Link<Void> typeSort = new Link<Void>("typeSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_TYPE);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    add(typeSort);
    Link<Void> levelSort = new Link<Void>("levelSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_LEVEL);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    add(levelSort);
    Link<Void> accessSort = new Link<Void>("accessSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_ACCESS);
        }
    };
    add(accessSort);
    Label restrictedToolsHeader = new Label("restrictedToolsHeader",
            new StringResourceModel("restrictedToolsHeader", null)) {
        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    add(restrictedToolsHeader);
    Label hierarchyHeader = new Label("hierarchyHeader", new StringResourceModel("hierarchyHeader", null)) {
        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    add(hierarchyHeader);

    //Display user (if available)
    final AbstractReadOnlyModel userModel = new AbstractReadOnlyModel() {
        @Override
        public Object getObject() {
            if (searchTypeEid.equals(selectedSearchType) && eid != null && !"".equals(eid.trim())) {
                User u = getUser();
                if (u != null) {
                    return u.getDisplayName();
                }
            }
            return "";
        }
    };
    Label userName = new Label("userName", userModel) {
        @Override
        public boolean isVisible() {
            return searchTypeEid.equals(selectedSearchType) && eid != null && !"".equals(eid)
                    && !"".equals(userModel.getObject());
        }
    };
    add(userName);

    add(new Link("editUserLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            User u = getUser();
            if (u != null) {
                setResponsePage(new UserEditPage(u.getId(), u.getDisplayName()));
            }
        }
    });

    Link removeAllPermsLink = new Link("removeAllPerms") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            User u = getUser();
            if (u != null) {
                projectLogic.removeAllPermsForUser(u.getId());
                provider.detachManually();
            }
        }

        @Override
        public boolean isVisible() {
            return sakaiProxy.isSuperUser();
        }
    };
    String confirm = new StringResourceModel("confirmRemoveAll", null).getObject();
    removeAllPermsLink.add(new SimpleAttributeModifier("onclick", "return confirm('" + confirm + "');"));
    add(removeAllPermsLink);

    //tool id=>title map:
    final Map<String, String> toolTitleMap = new HashMap<String, String>();
    final List<ListOptionSerialized> blankRestrictedTools = projectLogic.getEntireToolsList();
    for (ListOptionSerialized opt : blankRestrictedTools) {
        toolTitleMap.put(opt.getId(), opt.getName());
    }

    //Data
    String[] tmpHierarchy = sakaiProxy
            .getServerConfigurationStrings(DelegatedAccessConstants.HIERARCHY_SITE_PROPERTIES);
    if (tmpHierarchy == null || tmpHierarchy.length == 0) {
        tmpHierarchy = DelegatedAccessConstants.DEFAULT_HIERARCHY;
    }
    final String[] hierarchy = new String[tmpHierarchy.length + 1];
    //include the root as part of the hierarchy:
    hierarchy[0] = sakaiProxy.getRootName();
    for (int i = 1; i < hierarchy.length; i++) {
        hierarchy[i] = tmpHierarchy[i - 1];
    }
    provider = new AccessSearchResultDataProvider();
    dataView = new DataView<AccessSearchResult>("searchResult", provider) {
        @Override
        public void populateItem(final Item item) {
            final AccessSearchResult searchResult = (AccessSearchResult) item.getModelObject();
            item.add(new Label("userId", searchResult.getEid()) {
                @Override
                public boolean isVisible() {
                    return searchTypeHierarchy.equals(selectedSearchType);
                }
            });
            item.add(new Label("name", searchResult.getSortName()));
            item.add(new Label("type", new StringResourceModel("accessType" + searchResult.getType(), null)));
            String level = "";
            if (hierarchy != null && searchResult.getLevel() < hierarchy.length) {
                level = hierarchy[searchResult.getLevel()];
            } else {
                level = new StringResourceModel("site", null).getObject();
            }
            item.add(new Label("level", level));
            AbstractReadOnlyModel<String> accessModel = new AbstractReadOnlyModel<String>() {
                @Override
                public String getObject() {
                    String returnVal = "";
                    if (searchResult.getAccess() != null && searchResult.getAccess().length == 2) {
                        returnVal = searchResult.getAccess()[0] + ":" + searchResult.getAccess()[1];
                        if (":".equals(returnVal)) {
                            returnVal = "";
                        }
                    }
                    return returnVal;
                }
            };
            item.add(new Label("access", accessModel));
            item.add(new ListView<String>("restrictedTools", searchResult.getRestrictedTools()) {

                @Override
                protected void populateItem(ListItem<String> arg0) {
                    String toolTitle = arg0.getDefaultModelObject().toString();
                    if (toolTitleMap.containsKey(toolTitle)) {
                        toolTitle = toolTitleMap.get(toolTitle);
                    }
                    arg0.add(new Label("restrictedTool", toolTitle));
                }
            });
            item.add(new ListView<String>("hierarchy", searchResult.getHierarchyNodes()) {

                @Override
                protected void populateItem(ListItem<String> arg0) {
                    String hierarchyStr = "|-";
                    for (String hierarchyLevel : searchResult.getHierarchyNodes()) {
                        if (hierarchyLevel.equals(arg0.getDefaultModelObject())) {
                            break;
                        }
                        hierarchyStr += "-";
                    }
                    hierarchyStr += arg0.getDefaultModelObject();
                    arg0.add(new Label("hierarchyTitle", hierarchyStr));
                }

            });
            Link<Void> viewLink = new Link("view") {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    setResponsePage(new SearchAccessPage(false, searchResult.getEid()));
                }

                @Override
                public boolean isVisible() {
                    return searchTypeHierarchy.equals(selectedSearchType);
                }
            };
            item.add(viewLink);
            Link<Void> userIdLink = new Link("edit") {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    setResponsePage(new UserEditPage(searchResult.getId(), searchResult.getDisplayName()));
                }

                @Override
                public boolean isVisible() {
                    return searchTypeHierarchy.equals(selectedSearchType);
                }
            };
            item.add(userIdLink);
            Link<Void> removeLink = new Link("remove") {
                @Override
                public void onClick() {
                    projectLogic.removeAccess(searchResult.getNodeId(), searchResult.getId(),
                            searchResult.getType());
                    provider.detachManually();
                }

                @Override
                public boolean isVisible() {
                    return searchResult.isCanEdit();
                }
            };
            String confirm = new StringResourceModel("confirmRemove", null).getObject();
            removeLink.add(new SimpleAttributeModifier("onclick", "return confirm('" + confirm + "');"));
            item.add(removeLink);

            //add css class
            if (rowIndex == 100) {
                rowIndex = 0;
            }
            item.add(new AttributeAppender("class", true, new Model<String>(rowIndex % 2 == 0 ? "even" : "odd"),
                    ";"));
            rowIndex++;
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }

        @Override
        protected void onComponentTag(ComponentTag arg0) {

        }

    };
    dataView.setOutputMarkupId(true);
    dataView.setItemReuseStrategy(new DefaultItemReuseStrategy());
    dataView.setItemsPerPage(DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE);
    add(dataView);
    //Navigation
    //add a pager to our table, only visible if we have more than SEARCH_RESULTS_PAGE_SIZE items
    add(new PagingNavigator("navigatorTop", dataView) {

        @Override
        public boolean isVisible() {
            if (provider.size() > DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE) {
                return true;
            }
            return false;
        }

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

            //clear the feedback panel messages
            clearFeedback(feedbackPanel);
        }
    });
    add(new PagingNavigator("navigatorBottom", dataView) {

        @Override
        public boolean isVisible() {
            if (provider.size() > DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE) {
                return true;
            }
            return false;
        }

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

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

}

From source file:org.sakaiproject.delegatedaccess.tool.pages.SearchUsersPage.java

License:Educational Community License

public SearchUsersPage() {

    disableLink(searchUsersLink);//from  w  w w  . ja  va  2  s. co m

    //Create Search Form:
    final PropertyModel<String> messageModel = new PropertyModel<String>(this, "search");
    Form<?> form = new Form("form") {
        @Override
        protected void onSubmit() {
            super.onSubmit();
            if (provider != null) {
                provider.detachManually();
            }
        }
    };
    form.add(new TextField<String>("search", messageModel));
    add(form);

    //show user's search (if not null)
    add(new Label("searchResultsTitle", new StringResourceModel("searchResultsTitle", null)) {
        @Override
        public boolean isVisible() {
            return messageModel.getObject() != null && !"".equals(messageModel.getObject());
        }
    });
    add(new Label("searchString", messageModel) {
        @Override
        public boolean isVisible() {
            return messageModel.getObject() != null && !"".equals(messageModel.getObject());
        }
    });

    //search result table:
    //Headers
    Link<Void> userIdSort = new Link<Void>("userIdSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_EID);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    add(userIdSort);
    Link<Void> nameSort = new Link<Void>("nameSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_SORT_NAME);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    add(nameSort);
    Link<Void> emailSort = new Link<Void>("emailSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_EMAIL);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    add(emailSort);
    Link<Void> typeSort = new Link<Void>("typeSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_TYPE);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    add(typeSort);
    //Data:
    provider = new SearchResultDataProvider();
    final DataView<SearchResult> dataView = new DataView<SearchResult>("searchResult", provider) {
        @Override
        public void populateItem(final Item item) {
            final SearchResult searchResult = (SearchResult) item.getModelObject();
            item.add(new Label("userId", searchResult.getEid()));
            Link<Void> userEditLink = new Link("editLink") {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    setResponsePage(new UserEditPage(searchResult.getId(), searchResult.getDisplayName()));
                }
            };
            item.add(userEditLink);
            Link<Void> userViewLink = new Link("viewLink") {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    setResponsePage(new SearchAccessPage(false, searchResult.getEid()));
                }
            };
            item.add(userViewLink);
            item.add(new Label("name", searchResult.getSortName()));
            item.add(new Label("email", searchResult.getEmail()));
            item.add(new Label("type", searchResult.getType()));
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    dataView.setItemReuseStrategy(new DefaultItemReuseStrategy());
    dataView.setItemsPerPage(DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE);
    add(dataView);
    //Navigation
    //add a pager to our table, only visible if we have more than SEARCH_RESULTS_PAGE_SIZE items
    add(new PagingNavigator("navigatorTop", dataView) {

        @Override
        public boolean isVisible() {
            if (provider.size() > DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE) {
                return true;
            }
            return false;
        }

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

            //clear the feedback panel messages
            clearFeedback(feedbackPanel);
        }
    });
    add(new PagingNavigator("navigatorBottom", dataView) {

        @Override
        public boolean isVisible() {
            if (provider.size() > DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE) {
                return true;
            }
            return false;
        }

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

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

}

From source file:org.sakaiproject.delegatedaccess.tool.pages.UserPage.java

License:Educational Community License

public UserPage() {
    disableLink(accessPageLink);/*from ww  w  . j  a va  2s .  c o m*/

    //this is the home page so set user as current user
    if (isShoppingPeriodTool()) {
        userId = DelegatedAccessConstants.SHOPPING_PERIOD_USER;
    } else {
        //check if they should even have acces to this page:
        if (!hasDelegatedAccess) {
            if (hasShoppingAdmin) {
                setResponsePage(new ShoppingEditPage());
            } else if (hasAccessAdmin) {
                setResponsePage(new SearchUsersPage());
            }
        }

        userId = sakaiProxy.getCurrentUserId();
    }

    //Title
    Label title = new Label("title");
    if (isShoppingPeriodTool()) {
        title.setDefaultModel(new StringResourceModel("shoppingTitle", null));
    } else {
        title.setDefaultModel(new StringResourceModel("delegatedAccessTitle", null));
    }
    add(title);

    //Description
    Label description = new Label("description");
    if (isShoppingPeriodTool()) {
        description.setDefaultModel(new StringResourceModel("shoppingInstruction", null));
    } else {
        description.setDefaultModel(new StringResourceModel("delegatedAccessInstructions", null));
    }
    add(description);

    setTreeModel(userId, false);

    final List<ListOptionSerialized> blankRestrictedTools = projectLogic.getEntireToolsList();
    if (treeModel != null) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) treeModel.getRoot();
        if (((NodeModel) node.getUserObject()).isDirectAccess()) {
            projectLogic.addChildrenNodes(node, userId, blankRestrictedTools, true, null, false,
                    isShoppingPeriodTool());
        }
    }
    //a null model means the user doesn't have any associations
    tree = new LinkTree("tree", treeModel) {
        @Override
        public boolean isVisible() {
            return treeModel != null && ((!sakaiProxy.getDisableUserTreeView() && !isShoppingPeriodTool())
                    || (!sakaiProxy.getDisableShoppingTreeView() && isShoppingPeriodTool()));
        }

        protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) {
            if (tree.isLeaf(node)) {
                //The user has clicked a leaf and chances are its a site.
                //all sites are leafs, but there may be non sites as leafs
                NodeModel nodeModel = (NodeModel) ((DefaultMutableTreeNode) node).getUserObject();
                if (nodeModel.isSiteNode()) {
                    Site site = sakaiProxy.getSiteByRef(nodeModel.getNode().title);
                    if (site != null) {
                        //redirect the user to the site
                        target.appendJavascript("popupWindow('" + site.getUrl() + "', '"
                                + new StringResourceModel("popupBlockWarning", null).getObject() + "')");
                    }
                }
            } else {
                boolean anyAdded = false;
                if (!tree.getTreeState().isNodeExpanded(node)
                        && !((NodeModel) ((DefaultMutableTreeNode) node).getUserObject())
                                .isAddedDirectChildrenFlag()) {
                    anyAdded = projectLogic.addChildrenNodes(node, userId, blankRestrictedTools, true, null,
                            false, isShoppingPeriodTool());
                    ((NodeModel) ((DefaultMutableTreeNode) node).getUserObject())
                            .setAddedDirectChildrenFlag(true);
                }
                if (anyAdded) {
                    collapseEmptyFoldersHelper((DefaultMutableTreeNode) node);
                }

                if (!tree.getTreeState().isNodeExpanded(node) || anyAdded) {
                    tree.getTreeState().expandNode(node);
                } else {
                    tree.getTreeState().collapseNode(node);
                }
            }
        };

        protected void onJunctionLinkClicked(AjaxRequestTarget target, Object node) {
            //the nodes are generated on the fly with ajax.  This will add any child nodes that 
            //are missing in the tree.  Expanding and collapsing will refresh the tree node
            if (tree.getTreeState().isNodeExpanded(node)
                    && !((NodeModel) ((DefaultMutableTreeNode) node).getUserObject())
                            .isAddedDirectChildrenFlag()) {
                boolean anyAdded = projectLogic.addChildrenNodes(node, userId, blankRestrictedTools, true, null,
                        false, isShoppingPeriodTool());
                ((NodeModel) ((DefaultMutableTreeNode) node).getUserObject()).setAddedDirectChildrenFlag(true);
                if (anyAdded) {
                    collapseEmptyFoldersHelper((DefaultMutableTreeNode) node);
                }
            }
        }

        @Override
        protected boolean isForceRebuildOnSelectionChange() {
            return false;
        };
    };
    tree.setRootLess(true);
    add(tree);
    tree.getTreeState().collapseAll();

    //Access Warning:
    Label noAccessLabel = new Label("noAccess") {
        @Override
        public boolean isVisible() {
            return treeModel == null && (!isShoppingPeriodTool() && !sakaiProxy.getDisableUserTreeView());
        }
    };
    if (isShoppingPeriodTool()) {
        noAccessLabel.setDefaultModel(new StringResourceModel("noShoppingSites", null));

    } else {
        noAccessLabel.setDefaultModel(new StringResourceModel("noDelegatedAccess", null));
    }
    add(noAccessLabel);

    //no hierarchy setup:
    add(new Label("noHierarchy", new StringResourceModel("noHierarchy", null)) {
        public boolean isVisible() {
            return treeModel == null && sakaiProxy.isSuperUser() && "".equals(projectLogic.getRootNodeId().id);
        }
    });

    //Create Search Form:
    final PropertyModel<String> messageModel = new PropertyModel<String>(this, "search");
    final PropertyModel<String> instructorFieldModel = new PropertyModel<String>(this, "instructorField");
    final PropertyModel<SelectOption> termFieldModel = new PropertyModel<SelectOption>(this, "termField");
    final Form<?> form = new Form("form") {
        @Override
        protected void onSubmit() {
            Map<String, Object> advancedOptions = new HashMap<String, Object>();
            if (termField != null && !"".equals(termField.getValue())) {
                advancedOptions.put(DelegatedAccessConstants.ADVANCED_SEARCH_TERM, termField.getValue());
            }
            if (instructorField != null && !"".equals(instructorField)) {
                advancedOptions.put(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR, instructorField);
                advancedOptions.put(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE,
                        selectedInstructorOption);
            }
            Map<String, String> hierarchySearchFields = new HashMap<String, String>();
            for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
                if (entry.getValue() != null && !"".equals(entry.getValue().getValue().trim())) {
                    hierarchySearchFields.put(entry.getKey(), entry.getValue().getValue().trim());
                }
            }
            if (hierarchySearchFields.size() > 0) {
                advancedOptions.put(DelegatedAccessConstants.ADVANCED_SEARCH_HIERARCHY_FIELDS,
                        hierarchySearchFields);
            }
            //need to set the tree model so that is is the full model
            setResponsePage(new UserPageSiteSearch(search, advancedOptions, false, false));
        }

        @Override
        public boolean isVisible() {
            return treeModel != null || isShoppingPeriodTool()
                    || (!isShoppingPeriodTool() && sakaiProxy.getDisableUserTreeView());
        }
    };
    AbstractReadOnlyModel<String> instructorFieldLabelModel = new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            if (isShoppingPeriodTool()) {
                return new StringResourceModel("instructor", null).getObject() + ":";
            } else {
                return new StringResourceModel("user", null).getObject() + ":";
            }
        }
    };
    form.add(new Label("instructorFieldLabel", instructorFieldLabelModel));
    form.add(new TextField<String>("search", messageModel));
    form.add(new TextField<String>("instructorField", instructorFieldModel));
    //Instructor Options:
    RadioGroup group = new RadioGroup("instructorOptionsGroup",
            new PropertyModel<String>(this, "selectedInstructorOption")) {
        @Override
        public boolean isVisible() {
            //only show if its not shopping period
            return !isShoppingPeriodTool();
        }
    };
    group.add(new Radio("instructorOption",
            Model.of(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_INSTRUCTOR)));
    group.add(new Radio("memberOption",
            Model.of(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER)));
    form.add(group);
    List<SelectOption> termOptions = new ArrayList<SelectOption>();
    for (String[] entry : sakaiProxy.getTerms()) {
        termOptions.add(new SelectOption(entry[1], entry[0]));
    }
    final ChoiceRenderer choiceRenderer = new ChoiceRenderer("label", "value");
    DropDownChoice termFieldDropDown = new DropDownChoice("termField", termFieldModel, termOptions,
            choiceRenderer) {
        @Override
        public boolean isVisible() {
            return !sakaiProxy.isSearchHideTerm();
        }
    };
    //keeps the null option (choose one) after a user selects an option
    termFieldDropDown.setNullValid(true);
    form.add(termFieldDropDown);

    //hierarchy dropdown:
    String[] hierarchyTmp = sakaiProxy
            .getServerConfigurationStrings(DelegatedAccessConstants.HIERARCHY_SITE_PROPERTIES);
    if (hierarchyTmp == null || hierarchyTmp.length == 0) {
        hierarchyTmp = DelegatedAccessConstants.DEFAULT_HIERARCHY;
    }
    final String[] hierarchy = hierarchyTmp;
    WebMarkupContainer hierarchyDiv = new WebMarkupContainer("hierarchyFields");
    final Comparator<SelectOption> optionComparator = new SelectOptionComparator();
    if (hierarchySelectOptions == null || hierarchySelectOptions.size() == 0) {
        nodeSelectOrder = new ArrayList<String>();
        hierarchySearchMap = new HashMap<String, SelectOption>();
        for (String s : hierarchy) {
            hierarchySearchMap.put(s, null);
            nodeSelectOrder.add(s);
            hierarchyLabels.put(s, sakaiProxy.getHierarchySearchLabel(s));
        }
        Map<String, String> searchParams = new HashMap<String, String>();
        for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
            searchParams.put(entry.getKey(), entry.getValue() == null ? "" : entry.getValue().getValue());
        }
        Map<String, Set<String>> hierarchyOptions = projectLogic.getHierarchySearchOptions(searchParams);
        hierarchySelectOptions = new HashMap<String, List<SelectOption>>();
        for (Entry<String, Set<String>> entry : hierarchyOptions.entrySet()) {
            List<SelectOption> options = new ArrayList<SelectOption>();
            for (String s : entry.getValue()) {
                options.add(new SelectOption(s, s));
            }
            Collections.sort(options, optionComparator);
            hierarchySelectOptions.put(entry.getKey(), options);
        }
    }
    DataView dropdowns = new DataView("hierarchyDropdowns", new IDataProvider<String>() {

        @Override
        public void detach() {

        }

        @Override
        public Iterator<? extends String> iterator(int first, int count) {
            return nodeSelectOrder.subList(first, first + count).iterator();
        }

        @Override
        public IModel<String> model(final String arg0) {
            return new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return arg0;
                }
            };
        }

        @Override
        public int size() {
            return nodeSelectOrder.size();
        }

    }) {

        @Override
        protected void populateItem(Item item) {
            final String hierarchyLevel = item.getModelObject().toString();
            item.add(new Label("hierarchyLabel",
                    hierarchyLabels.containsKey(hierarchyLevel) ? hierarchyLabels.get(hierarchyLevel)
                            : hierarchyLevel));
            final DropDownChoice choice = new DropDownChoice("hierarchyLevel",
                    new NodeSelectModel(hierarchyLevel), hierarchySelectOptions.get(hierarchyLevel),
                    choiceRenderer);
            //keeps the null option (choose one) after a user selects an option
            choice.setNullValid(true);
            choice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                protected void onUpdate(AjaxRequestTarget target) {
                    Map<String, String> searchParams = new HashMap<String, String>();
                    for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
                        searchParams.put(entry.getKey(),
                                entry.getValue() == null ? "" : entry.getValue().getValue());
                    }
                    Map<String, Set<String>> hierarchyOptions = projectLogic
                            .getHierarchySearchOptions(searchParams);
                    hierarchySelectOptions = new HashMap<String, List<SelectOption>>();
                    for (Entry<String, Set<String>> entry : hierarchyOptions.entrySet()) {
                        List<SelectOption> options = new ArrayList<SelectOption>();
                        for (String s : entry.getValue()) {
                            options.add(new SelectOption(s, s));
                        }
                        Collections.sort(options, optionComparator);
                        hierarchySelectOptions.put(entry.getKey(), options);
                    }

                    //refresh everything:
                    target.addComponent(form);
                }
            });
            item.add(choice);
        }

    };
    hierarchyDiv.add(dropdowns);
    form.add(hierarchyDiv);

    form.add(new WebMarkupContainer("searchHeader"));
    form.add(new Button("submitButton"));

    add(form);

}

From source file:org.sakaiproject.delegatedaccess.tool.pages.UserPageSiteSearch.java

License:Educational Community License

@SuppressWarnings("unchecked")
public void buildPage(final String search, final Map<String, Object> advancedFields, final boolean statistics,
        final boolean currentStatisticsFlag) {
    this.search = search;
    this.statistics = statistics;
    this.currentStatisticsFlag = currentStatisticsFlag;
    if (statistics) {
        disableLink(shoppingStatsLink);/*from w ww.j a v a 2  s .  c om*/
    }
    List<ListOptionSerialized> blankRestrictedTools = projectLogic.getEntireToolsList();
    toolsMap = new HashMap<String, String>();
    for (ListOptionSerialized option : blankRestrictedTools) {
        toolsMap.put(option.getId(), option.getName());
    }

    //Setup Statistics Links:
    Link<Void> currentLink = new Link<Void>("currentLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            setResponsePage(new UserPageSiteSearch("", null, true, true));
        }

        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    currentLink.add(new Label("currentLinkLabel", new ResourceModel("link.current")).setRenderBodyOnly(true));
    currentLink.add(new AttributeModifier("title", true, new ResourceModel("link.current.tooltip")));
    add(currentLink);

    if (currentStatisticsFlag) {
        disableLink(currentLink);
    }

    Link<Void> allLink = new Link<Void>("allLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            setResponsePage(new UserPageSiteSearch("", null, true, false));
        }

        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    allLink.add(new Label("allLinkLabel", new ResourceModel("link.all")).setRenderBodyOnly(true));
    allLink.add(new AttributeModifier("title", true, new ResourceModel("link.all.tooltip")));
    add(allLink);
    if (!currentStatisticsFlag) {
        disableLink(allLink);
    }

    termOptions = new ArrayList<SelectOption>();
    for (String[] entry : sakaiProxy.getTerms()) {
        termOptions.add(new SelectOption(entry[1], entry[0]));
    }
    Map<String, String> hierarchySearchFields = new HashMap<String, String>();
    if (advancedFields != null) {
        for (Entry<String, Object> entry : advancedFields.entrySet()) {
            if (DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR.equals(entry.getKey())) {
                instructorField = entry.getValue().toString();
                selectedInstructorOption = advancedFields
                        .get(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE).toString();
            }
            if (DelegatedAccessConstants.ADVANCED_SEARCH_TERM.equals(entry.getKey())) {
                for (SelectOption option : termOptions) {
                    if (entry.getValue().equals(option.getValue())) {
                        termField = option;
                        break;
                    }
                }
            }
            if (DelegatedAccessConstants.ADVANCED_SEARCH_HIERARCHY_FIELDS.equals(entry.getKey())) {
                hierarchySearchFields = (Map<String, String>) entry.getValue();
            }
        }
    }
    //Create Search Form:
    final PropertyModel<String> searchModel = new PropertyModel<String>(this, "search");
    final PropertyModel<String> instructorFieldModel = new PropertyModel<String>(this, "instructorField");
    final PropertyModel<SelectOption> termFieldModel = new PropertyModel<SelectOption>(this, "termField");
    final IModel<String> searchStringModel = new IModel<String>() {

        public void detach() {
        }

        public void setObject(String arg0) {
        }

        public String getObject() {
            String searchString = "";
            if (searchModel.getObject() != null && !"".equals(searchModel.getObject().toString().trim())) {
                searchString += new StringResourceModel("siteIdTitleField", null).getString() + " "
                        + searchModel.getObject();
            }
            if (instructorFieldModel.getObject() != null && !"".equals(instructorFieldModel.getObject())) {
                if (!"".equals(searchString))
                    searchString += ", ";
                String userType = new StringResourceModel("instructor", null).getString();
                if (DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER
                        .equals(selectedInstructorOption)) {
                    userType = new StringResourceModel("member", null).getString();
                }
                searchString += userType + " " + instructorFieldModel.getObject();
            }
            if (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject())) {
                if (!"".equals(searchString))
                    searchString += ", ";
                searchString += new StringResourceModel("termField", null).getString() + " "
                        + termFieldModel.getObject().getLabel();
            }
            //hierarchy params:
            if (hierarchySearchMap != null) {
                for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
                    if (entry.getValue() != null && !"".equals(entry.getValue().getValue().trim())) {
                        if (!"".equals(searchString))
                            searchString += ", ";
                        searchString += hierarchyLabels.get(entry.getKey()) + ": "
                                + entry.getValue().getValue().trim();
                    }
                }
            }
            return searchString;
        }
    };
    final IModel<String> permaLinkModel = new IModel<String>() {

        @Override
        public void detach() {
        }

        @Override
        public String getObject() {
            String path = "/shopping";

            Map<String, String> params = new HashMap<String, String>();
            //Search
            if (searchModel.getObject() != null) {
                params.put("search", searchModel.getObject());
            }
            //term:
            if (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject())) {
                params.put("term", termFieldModel.getObject().getValue());
            }
            //instructor
            if (instructorFieldModel.getObject() != null && !"".equals(instructorFieldModel.getObject())) {
                params.put("instructor", instructorFieldModel.getObject());
                if (DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER
                        .equals(selectedInstructorOption)) {
                    params.put("instructorType",
                            DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER);
                } else {
                    params.put("instructorType",
                            DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_INSTRUCTOR);
                }
            }
            //hierarchy params:
            if (hierarchySearchMap != null) {
                int i = 0;
                for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
                    if (entry.getValue() != null && !"".equals(entry.getValue().getValue().trim())) {
                        params.put("hierarchyKey" + i, entry.getKey());
                        params.put("hierarchyValue" + i, entry.getValue().getValue());
                        i++;
                    }
                }
            }

            String context = sakaiProxy.siteReference(sakaiProxy.getCurrentPlacement().getContext());

            String url = "";
            try {
                String tool = "sakai.delegatedaccess";
                if (isShoppingPeriodTool()) {
                    tool += ".shopping";
                }
                url = developerHelperService.getToolViewURL(tool, path, params, context);
            } catch (Exception e) {

            }
            return url;
        }

        @Override
        public void setObject(String arg0) {
        }

    };
    final Form<?> form = new Form("form") {
        @Override
        protected void onSubmit() {
            super.onSubmit();
            if (provider != null) {
                provider.detachManually();
            }
        }
    };
    form.add(new TextField<String>("search", searchModel));
    AbstractReadOnlyModel<String> instructorFieldLabelModel = new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            if (isShoppingPeriodTool()) {
                return new StringResourceModel("instructor", null).getObject() + ":";
            } else {
                return new StringResourceModel("user", null).getObject() + ":";
            }
        }
    };
    form.add(new Label("instructorFieldLabel", instructorFieldLabelModel));
    form.add(new TextField<String>("instructorField", instructorFieldModel));
    //Instructor Options:
    RadioGroup group = new RadioGroup("instructorOptionsGroup",
            new PropertyModel<String>(this, "selectedInstructorOption")) {
        @Override
        public boolean isVisible() {
            //only show if its not shopping period
            return !isShoppingPeriodTool();
        }
    };
    group.add(new Radio("instructorOption",
            Model.of(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_INSTRUCTOR)));
    group.add(new Radio("memberOption",
            Model.of(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER)));
    form.add(group);

    final ChoiceRenderer choiceRenderer = new ChoiceRenderer("label", "value");
    DropDownChoice termFieldDropDown = new DropDownChoice("termField", termFieldModel, termOptions,
            choiceRenderer) {
        @Override
        public boolean isVisible() {
            return !sakaiProxy.isSearchHideTerm();
        }
    };
    //keeps the null option (choose one) after a user selects an option
    termFieldDropDown.setNullValid(true);
    form.add(termFieldDropDown);
    add(form);

    //hierarchy dropdown:
    String[] hierarchyTmp = sakaiProxy
            .getServerConfigurationStrings(DelegatedAccessConstants.HIERARCHY_SITE_PROPERTIES);
    if (hierarchyTmp == null || hierarchyTmp.length == 0) {
        hierarchyTmp = DelegatedAccessConstants.DEFAULT_HIERARCHY;
    }
    final String[] hierarchy = hierarchyTmp;
    WebMarkupContainer hierarchyDiv = new WebMarkupContainer("hierarchyFields");
    final Comparator<SelectOption> optionComparator = new SelectOptionComparator();
    if (hierarchySelectOptions == null || hierarchySelectOptions.size() == 0) {
        nodeSelectOrder = new ArrayList<String>();
        hierarchySearchMap = new HashMap<String, SelectOption>();
        for (String s : hierarchy) {
            hierarchySearchMap.put(s, null);
            nodeSelectOrder.add(s);
            hierarchyLabels.put(s, sakaiProxy.getHierarchySearchLabel(s));
        }
        Map<String, String> searchParams = new HashMap<String, String>();
        for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
            String value = entry.getValue() == null ? "" : entry.getValue().getValue();
            //in case user passed in a parameter, set it:
            if (hierarchySearchFields.containsKey(entry.getKey())) {
                value = hierarchySearchFields.get(entry.getKey());
            }
            searchParams.put(entry.getKey(), value);
        }
        Map<String, Set<String>> hierarchyOptions = projectLogic.getHierarchySearchOptions(searchParams);
        hierarchySelectOptions = new HashMap<String, List<SelectOption>>();
        for (Entry<String, Set<String>> entry : hierarchyOptions.entrySet()) {
            List<SelectOption> options = new ArrayList<SelectOption>();
            for (String s : entry.getValue()) {
                SelectOption o = new SelectOption(s, s);
                options.add(o);
                if (searchParams.containsKey(entry.getKey()) && s.equals(searchParams.get(entry.getKey()))) {
                    hierarchySearchMap.put(entry.getKey(), o);
                }
            }
            Collections.sort(options, optionComparator);
            hierarchySelectOptions.put(entry.getKey(), options);
        }
    }
    DataView dropdowns = new DataView("hierarchyDropdowns", new IDataProvider<String>() {

        @Override
        public void detach() {

        }

        @Override
        public Iterator<? extends String> iterator(int first, int count) {
            return nodeSelectOrder.subList(first, first + count).iterator();
        }

        @Override
        public IModel<String> model(final String arg0) {
            return new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return arg0;
                }
            };
        }

        @Override
        public int size() {
            return nodeSelectOrder.size();
        }

    }) {

        @Override
        protected void populateItem(Item item) {
            final String hierarchyLevel = item.getModelObject().toString();
            item.add(new Label("hierarchyLabel",
                    hierarchyLabels.containsKey(hierarchyLevel) ? hierarchyLabels.get(hierarchyLevel)
                            : hierarchyLevel));
            final DropDownChoice choice = new DropDownChoice("hierarchyLevel",
                    new NodeSelectModel(hierarchyLevel), hierarchySelectOptions.get(hierarchyLevel),
                    choiceRenderer);
            //keeps the null option (choose one) after a user selects an option
            choice.setNullValid(true);
            choice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                protected void onUpdate(AjaxRequestTarget target) {
                    Map<String, String> searchParams = new HashMap<String, String>();
                    for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
                        searchParams.put(entry.getKey(),
                                entry.getValue() == null ? "" : entry.getValue().getValue());
                    }
                    Map<String, Set<String>> hierarchyOptions = projectLogic
                            .getHierarchySearchOptions(searchParams);
                    hierarchySelectOptions = new HashMap<String, List<SelectOption>>();
                    for (Entry<String, Set<String>> entry : hierarchyOptions.entrySet()) {
                        List<SelectOption> options = new ArrayList<SelectOption>();
                        for (String s : entry.getValue()) {
                            options.add(new SelectOption(s, s));
                        }
                        Collections.sort(options, optionComparator);
                        hierarchySelectOptions.put(entry.getKey(), options);
                    }

                    //refresh everything:
                    target.addComponent(form);
                }
            });
            item.add(choice);
        }

    };
    hierarchyDiv.add(dropdowns);
    form.add(hierarchyDiv);

    //show user's search (if not null)
    add(new Label("searchResultsTitle", new StringResourceModel("searchResultsTitle", null)) {
        @Override
        public boolean isVisible() {
            return (searchModel.getObject() != null && !"".equals(searchModel.getObject()))
                    || (instructorFieldModel.getObject() != null
                            && !"".equals(instructorFieldModel.getObject()))
                    || (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject()))
                    || hierarchyOptionSelected();
        }
    });
    add(new Label("searchString", searchStringModel) {
        @Override
        public boolean isVisible() {
            return (searchModel.getObject() != null && !"".equals(searchModel.getObject()))
                    || (instructorFieldModel.getObject() != null
                            && !"".equals(instructorFieldModel.getObject()))
                    || (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject()))
                    || hierarchyOptionSelected();
        }
    });
    add(new TextField("permaLink", permaLinkModel) {
        @Override
        public boolean isVisible() {
            return (searchModel.getObject() != null && !"".equals(searchModel.getObject()))
                    || (instructorFieldModel.getObject() != null
                            && !"".equals(instructorFieldModel.getObject()))
                    || (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject()))
                    || hierarchyOptionSelected();
        }
    });
    //search result table:
    //Headers
    final Link<Void> siteTitleSort = new Link<Void>("siteTitleSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_SITE_TITLE);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    final Label siteTitleLabel = new Label("siteTitleLabel", new StringResourceModel("siteTitleHeader", null));
    siteTitleSort.add(siteTitleLabel);
    add(siteTitleSort);

    final Link<Void> siteIdSort = new Link<Void>("siteIdSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_SITE_ID);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    final Label siteIdSortLabel = new Label("siteIdSortLabel", new StringResourceModel("siteIdHeader", null));
    siteIdSort.add(siteIdSortLabel);
    add(siteIdSort);

    final Link<Void> termSort = new Link<Void>("termSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_TERM);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    final Label termSortLabel = new Label("termSortLabel", new StringResourceModel("termHeader", null));
    termSort.add(termSortLabel);
    add(termSort);

    AbstractReadOnlyModel<String> instructorSortLabelModel = new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            if (DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER
                    .equals(selectedInstructorOption)) {
                return new StringResourceModel("member", null).getObject();
            } else {
                return new StringResourceModel("instructor", null).getObject();
            }
        }
    };
    final Link<Void> instructorSort = new Link<Void>("instructorSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_INSTRUCTOR);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    final Label instructorSortLabel = new Label("instructorSortLabel", instructorSortLabelModel);
    instructorSort.add(instructorSortLabel);
    add(instructorSort);

    final Link<Void> providersSort = new Link<Void>("providersSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_PROVIDERS);
        }

        @Override
        public boolean isVisible() {
            //this helps hide all the extra columns with the wicket:enclosure in the html
            return !isShoppingPeriodTool() && sakaiProxy.isProviderIdLookupEnabled();
        }
    };
    final Label providersSortLabel = new Label("providersSortLabel",
            new StringResourceModel("providers", null));
    providersSort.add(providersSortLabel);
    add(providersSort);

    final Link<Void> publishedSort = new Link<Void>("publishedSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_PUBLISHED);
        }

        @Override
        public boolean isVisible() {
            //this helps hide all the extra columns with the wicket:enclosure in the html
            return !isShoppingPeriodTool();
        }
    };
    final Label publishedSortLabel = new Label("publishedSortLabel",
            new StringResourceModel("published", null));
    publishedSort.add(publishedSortLabel);
    add(publishedSort);

    final Link<Void> accessSort = new Link<Void>("accessSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_ACCESS);
        }
    };
    final Label accessSortLabel = new Label("accessSortLabel", new StringResourceModel("access", null));
    accessSort.add(accessSortLabel);
    add(accessSort);

    final Link<Void> startDateSort = new Link<Void>("startDateSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_START_DATE);
        }

        @Override
        public boolean isVisible() {
            //this helps with the wicket:enlosure
            return statistics;
        }
    };
    final Label startDateSortLabel = new Label("startDateSortLabel",
            new StringResourceModel("startDate", null));
    startDateSort.add(startDateSortLabel);
    add(startDateSort);

    final Link<Void> endDateSort = new Link<Void>("endDateSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_END_DATE);
        }

        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    final Label endDateSortLabel = new Label("endDateSortLabel", new StringResourceModel("endDate", null));
    endDateSort.add(endDateSortLabel);
    add(endDateSort);

    final Label showAuthToolsHeader = new Label("showAuthToolsHeader",
            new StringResourceModel("showAuthToolsHeader", null)) {
        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    add(showAuthToolsHeader);

    final Label showPublicToolsHeader = new Label("showPublicToolsHeader",
            new StringResourceModel("showPublicToolsHeader", null)) {
        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    add(showPublicToolsHeader);

    final Link<Void> accessModifiedBySort = new Link<Void>("accessModifiedBySortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_ACCESS_MODIFIED_BY);
        }

        @Override
        public boolean isVisible() {
            //this helps hide all the extra columns with the wicket:enclosure in the html
            return !isShoppingPeriodTool();
        }
    };
    final Label accessModifiedBySortLabel = new Label("accessModifiedBySortLabel",
            new StringResourceModel("accessModifiedBy", null));
    accessModifiedBySort.add(accessModifiedBySortLabel);
    add(accessModifiedBySort);

    final Link<Void> accessModifiedOnSort = new Link<Void>("accessModifiedOnSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_ACCESS_MODIFIED);
        }

        @Override
        public boolean isVisible() {
            //this helps hide all the extra columns with the wicket:enclosure in the html
            return !isShoppingPeriodTool();
        }
    };
    final Label accessModifiedOnSortLabel = new Label("accessModifiedOnSortLabel",
            new StringResourceModel("accessModifiedOn", null));
    accessModifiedOnSort.add(accessModifiedOnSortLabel);
    add(accessModifiedOnSort);

    //Data:
    provider = new SiteSearchResultDataProvider();
    final DataView<SiteSearchResult> dataView = new DataView<SiteSearchResult>("searchResult", provider) {
        @Override
        public void populateItem(final Item item) {
            final SiteSearchResult siteSearchResult = (SiteSearchResult) item.getModelObject();
            AjaxLink<Void> siteTitleLink = new AjaxLink("siteTitleLink") {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {
                    if (siteSearchResult.getSiteUrl() != null) {
                        //redirect the user to the site
                        target.appendJavascript("popupWindow('" + siteSearchResult.getSiteUrl() + "', '"
                                + new StringResourceModel("popupBlockWarning", null).getObject() + "')");
                    }
                }
            };
            siteTitleLink.add(new Label("siteTitle", siteSearchResult.getSiteTitle()));
            item.add(siteTitleLink);
            final String siteRef = siteSearchResult.getSiteReference();
            final String siteId = siteSearchResult.getSiteId();
            item.add(new Label("siteId", siteId));
            item.add(new Label("term", siteSearchResult.getSiteTerm()));
            item.add(new Label("instructor", new AbstractReadOnlyModel<String>() {
                @Override
                public String getObject() {
                    return siteSearchResult.getInstructorsString();
                }

            }));
            item.add(new Link<Void>("instructorLookupLink") {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    boolean foundInstructors = false;
                    for (User user : sakaiProxy.getInstructorsForSite(siteId)) {
                        siteSearchResult.addInstructor(user);
                        foundInstructors = true;
                    }
                    if (!foundInstructors) {
                        siteSearchResult.setHasInstructor(false);
                    }
                }

                @Override
                public boolean isVisible() {
                    return (instructorField == null || "".equals(instructorField))
                            && siteSearchResult.isHasInstructor()
                            && siteSearchResult.getInstructors().size() == 0;
                }
            });
            item.add(new Label("providers", new AbstractReadOnlyModel<String>() {
                @Override
                public String getObject() {
                    return siteSearchResult.getProviders();
                }
            }) {
                @Override
                public boolean isVisible() {
                    return !isShoppingPeriodTool() && sakaiProxy.isProviderIdLookupEnabled();
                }
            });
            item.add(new Link<Void>("providersLookupLink") {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    String providers = sakaiProxy.getProviderId(siteRef);
                    if (providers == null || "".equals(providers)) {
                        //set it to a empty space so that the link will hide itself
                        providers = " ";
                    }
                    siteSearchResult.setProviders(providers);
                }

                @Override
                public boolean isVisible() {
                    return !isShoppingPeriodTool() && sakaiProxy.isProviderIdLookupEnabled()
                            && "".equals(siteSearchResult.getProviders());
                }
            });

            StringResourceModel publishedModel = siteSearchResult.isSitePublished()
                    ? new StringResourceModel("yes", null)
                    : new StringResourceModel("no", null);
            item.add(new Label("published", publishedModel) {
                @Override
                public boolean isVisible() {
                    return !isShoppingPeriodTool();
                }
            });
            String access = isShoppingPeriodTool() ? siteSearchResult.getAccessRoleString()
                    : siteSearchResult.getAccessString();
            item.add(new Label("access", access));
            item.add(new Label("startDate", siteSearchResult.getShoppingPeriodStartDateStr()) {
                @Override
                public boolean isVisible() {
                    //this helps hide all the extra columns with the wicket:enclosure in the html
                    return statistics;
                }
            });
            item.add(new Label("endDate", siteSearchResult.getShoppingPeriodEndDateStr()));
            item.add(new Label("showAuthTools", siteSearchResult.getAuthToolsString(toolsMap)));
            item.add(new Label("showPublicTools", siteSearchResult.getPublicToolsString(toolsMap)));
            item.add(new Label("accessModifiedBy", siteSearchResult.getModifiedBySortName()) {
                @Override
                public boolean isVisible() {
                    //this helps hide all the extra columns with the wicket:enclosure in the html
                    return !isShoppingPeriodTool();
                }
            });
            item.add(new Label("accessModified", siteSearchResult.getModifiedStr()));
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    dataView.setItemReuseStrategy(new DefaultItemReuseStrategy());
    dataView.setItemsPerPage(DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE);
    add(dataView);

    IModel<File> exportSearchModel = new AbstractReadOnlyModel<File>() {

        @Override
        public File getObject() {
            List<SiteSearchResult> data = provider.getData();
            try {
                String seperator = ",";
                String lineBreak = "\n";
                File file = File.createTempFile(
                        new StringResourceModel("searchExportFileName", null).getObject(), ".csv");
                FileWriter writer = new FileWriter(file.getAbsolutePath());
                //write headers:
                StringBuffer sb = new StringBuffer();
                if (siteTitleSort.isVisible()) {
                    sb.append("\"");
                    sb.append(siteTitleLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (instructorSort.isVisible()) {
                    sb.append("\"");
                    sb.append(instructorSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (termSort.isVisible()) {
                    sb.append("\"");
                    sb.append(termSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (siteIdSort.isVisible()) {
                    sb.append("\"");
                    sb.append(siteIdSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (providersSort.isVisible()) {
                    sb.append("\"");
                    sb.append(providersSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (publishedSort.isVisible()) {
                    sb.append("\"");
                    sb.append(publishedSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (accessSort.isVisible()) {
                    sb.append("\"");
                    sb.append(accessSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (startDateSort.isVisible()) {
                    sb.append("\"");
                    sb.append(startDateSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (endDateSort.isVisible()) {
                    sb.append("\"");
                    sb.append(endDateSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (showAuthToolsHeader.isVisible()) {
                    sb.append("\"");
                    sb.append(showAuthToolsHeader.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (showPublicToolsHeader.isVisible()) {
                    sb.append("\"");
                    sb.append(showPublicToolsHeader.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (accessModifiedBySort.isVisible()) {
                    sb.append("\"");
                    sb.append(accessModifiedBySortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (accessModifiedOnSort.isVisible()) {
                    sb.append("\"");
                    sb.append(accessModifiedOnSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                sb.append(lineBreak);

                String yes = new StringResourceModel("yes", null).getObject();
                String no = new StringResourceModel("no", null).getObject();

                for (SiteSearchResult siteSearchResult : data) {
                    if (siteTitleSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getSiteTitle());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (instructorSort.isVisible()) {
                        if (siteSearchResult.isHasInstructor()
                                && siteSearchResult.getInstructors().size() == 0) {
                            //we need to look up instructor:
                            boolean foundInstructors = false;
                            for (User user : sakaiProxy.getInstructorsForSite(siteSearchResult.getSiteId())) {
                                siteSearchResult.addInstructor(user);
                                foundInstructors = true;
                            }
                            if (!foundInstructors) {
                                siteSearchResult.setHasInstructor(false);
                            }
                        }
                        sb.append("\"");
                        sb.append(siteSearchResult.getInstructorsString());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (termSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getSiteTerm());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (siteIdSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getSiteId());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (providersSort.isVisible()) {
                        if ("".equals(siteSearchResult.getProviders())) {
                            //look up providers if it isn't already set
                            siteSearchResult.setProviders(
                                    sakaiProxy.getProviderId(siteSearchResult.getSiteReference()));
                        }
                        sb.append("\"");
                        sb.append(siteSearchResult.getProviders());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (publishedSort.isVisible()) {
                        sb.append("\"");
                        sb.append((siteSearchResult.isSitePublished() ? yes : no));
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (accessSort.isVisible()) {
                        sb.append("\"");
                        sb.append((isShoppingPeriodTool() ? siteSearchResult.getAccessRoleString()
                                : siteSearchResult.getAccessString()));
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (startDateSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getShoppingPeriodStartDateStr());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (endDateSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getShoppingPeriodEndDateStr());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (showAuthToolsHeader.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getAuthToolsString(toolsMap));
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (showPublicToolsHeader.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getPublicToolsString(toolsMap));
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (accessModifiedBySort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getModifiedBySortName());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (accessModifiedOnSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getModifiedStr());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    sb.append(lineBreak);
                }

                writer.append(sb.toString());
                writer.flush();
                writer.close();

                return file;
            } catch (IOException e) {
                log.error(e.getMessage(), e);
                return null;
            }
        }
    };

    add(new DownloadLink("exportData", exportSearchModel) {
        @Override
        public void onClick() {
            Object fileObj = getModelObject();
            if (fileObj != null && fileObj instanceof File) {
                File file = (File) fileObj;
                IResourceStream resourceStream = new FileResourceStream(
                        new org.apache.wicket.util.file.File(file));
                getRequestCycle().setRequestTarget(
                        new ResourceStreamRequestTarget(resourceStream, file.getName()).setFileName(
                                new StringResourceModel("searchExportFileName", null).getObject() + ".csv"));
            }
        }
    });

    //Navigation
    //add a pager to our table, only visible if we have more than SEARCH_RESULTS_PAGE_SIZE items
    add(new PagingNavigator("navigatorTop", dataView) {

        @Override
        public boolean isVisible() {
            if (provider.size() > DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE) {
                return true;
            }
            return false;
        }

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

            //clear the feedback panel messages
            clearFeedback(feedbackPanel);
        }
    });
    add(new PagingNavigator("navigatorBottom", dataView) {

        @Override
        public boolean isVisible() {
            if (provider.size() > DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE) {
                return true;
            }
            return false;
        }

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

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

}

From source file:org.sakaiproject.profile2.tool.pages.panels.ConfirmedFriends.java

License:Educational Community License

public ConfirmedFriends(final String id, final String userUuid) {
    super(id);/*  w w  w .  j a  va 2  s  .  co m*/

    log.debug("ConfirmedFriends()");

    //setup model to store the actions in the modal windows
    final FriendAction friendActionModel = new FriendAction();

    //get info for user viewing this page (will be the same if user is viewing own list, different if viewing someone else's)
    final String currentUserUuid = sakaiProxy.getCurrentUserId();
    //User currentUser = sakaiProxy.getUserQuietly(currentUserUuid);
    //final String currentUserType = currentUser.getType(); //to be used for checking if connection between users is allowed, when this is added

    //if viewing own friends, you can manage them.
    if (userUuid.equals(currentUserUuid)) {
        ownList = true;
    }

    //get our list of confirmed friends as an IDataProvider
    ConfirmedFriendsDataProvider provider = new ConfirmedFriendsDataProvider(userUuid);

    //init number of friends
    numConfirmedFriends = (int) provider.size();

    //model so we can update the number of friends
    IModel<Integer> numConfirmedFriendsModel = new Model<Integer>() {
        private static final long serialVersionUID = 1L;

        public Integer getObject() {
            return numConfirmedFriends;
        }
    };

    //heading
    final WebMarkupContainer confirmedFriendsHeading = new WebMarkupContainer("confirmedFriendsHeading");
    Label confirmedFriendsLabel = new Label("confirmedFriendsLabel");
    //if viewing own list, "my friends", else, "their name's friends"
    if (ownList) {
        confirmedFriendsLabel.setDefaultModel(new ResourceModel("heading.friends.my"));
    } else {
        String displayName = sakaiProxy.getUserDisplayName(userUuid);
        confirmedFriendsLabel.setDefaultModel(
                new StringResourceModel("heading.friends.view", null, new Object[] { displayName }));
    }
    confirmedFriendsHeading.add(confirmedFriendsLabel);
    confirmedFriendsHeading.add(new Label("confirmedFriendsNumber", numConfirmedFriendsModel));
    confirmedFriendsHeading.setOutputMarkupId(true);
    add(confirmedFriendsHeading);

    // actions
    Form<Void> confirmedFriendsButtonForm = new Form<Void>("confirmedFriendsButtonForm");
    add(confirmedFriendsButtonForm);

    //create worksite panel
    final CreateWorksitePanel createWorksitePanel = new CreateWorksitePanel("createWorksitePanel",
            connectionsLogic.getConnectionsForUser(userUuid));
    //create placeholder and set invisible initially
    createWorksitePanel.setOutputMarkupPlaceholderTag(true);
    createWorksitePanel.setVisible(false);

    confirmedFriendsButtonForm.add(createWorksitePanel);

    final AjaxButton createWorksiteButton = new AjaxButton("createWorksiteButton", confirmedFriendsButtonForm) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            createWorksitePanel.setVisible(true);
            target.add(createWorksitePanel);
            target.appendJavaScript("fixWindowVertical();");
        }

    };
    createWorksiteButton.setModel(new ResourceModel("link.worksite.create"));
    createWorksiteButton
            .add(new AttributeModifier("title", true, new ResourceModel("link.title.worksite.create")));
    createWorksiteButton.setVisible(sakaiProxy.isUserAllowedAddSite(userUuid));
    confirmedFriendsButtonForm.add(createWorksiteButton);

    //search for connections
    AjaxButton searchConnectionsButton = new AjaxButton("searchConnectionsButton", confirmedFriendsButtonForm) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            setResponsePage(new MySearch());
        }
    };
    searchConnectionsButton.setModel(new ResourceModel("link.my.friends.search"));
    confirmedFriendsButtonForm.add(searchConnectionsButton);

    //container which wraps list
    final WebMarkupContainer confirmedFriendsContainer = new WebMarkupContainer("confirmedFriendsContainer");
    confirmedFriendsContainer.setOutputMarkupId(true);

    //connection window
    final ModalWindow connectionWindow = new ModalWindow("connectionWindow");

    //results
    DataView<Person> confirmedFriendsDataView = new DataView<Person>("connections", provider) {
        private static final long serialVersionUID = 1L;

        protected void populateItem(final Item<Person> item) {

            Person person = (Person) item.getDefaultModelObject();
            final String personUuid = person.getUuid();

            //setup values
            String displayName = person.getDisplayName();
            boolean friend;

            //get friend status
            if (ownList) {
                friend = true; //viewing own page of conenctions, must be friend!
            } else {
                friend = connectionsLogic.isUserXFriendOfUserY(userUuid, personUuid); //other person viewing, check if they are friends
            }

            //get other objects
            ProfilePrivacy privacy = person.getPrivacy();
            ProfilePreferences prefs = person.getPreferences();

            //image wrapper, links to profile
            Link<String> friendItem = new Link<String>("connectionPhotoWrap", new Model<String>(personUuid)) {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    setResponsePage(new ViewProfile(getModelObject()));
                }
            };

            //image            
            ProfileImage connectionPhoto = new ProfileImage("connectionPhoto", new Model<String>(personUuid));
            connectionPhoto.setSize(ProfileConstants.PROFILE_IMAGE_THUMBNAIL);
            friendItem.add(connectionPhoto);

            item.add(friendItem);

            //name and link to profile
            Link<String> profileLink = new Link<String>("connectionLink", new Model<String>(personUuid)) {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    setResponsePage(new ViewProfile(getModelObject()));
                }

            };
            profileLink.add(new Label("connectionName", displayName));
            item.add(profileLink);

            //status component
            ProfileStatusRenderer status = new ProfileStatusRenderer("connectionStatus", person,
                    "connection-status-msg", "connection-status-date");
            status.setOutputMarkupId(true);
            item.add(status);

            /* ACTIONS */

            WebMarkupContainer c1 = new WebMarkupContainer("removeConnectionContainer");
            c1.setOutputMarkupId(true);

            //REMOVE FRIEND LINK AND WINDOW
            final AjaxLink<String> removeConnectionLink = new AjaxLink<String>("removeConnectionLink",
                    new Model<String>(personUuid)) {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {

                    //get this item, and set content for modalwindow
                    String friendUuid = getModelObject();
                    connectionWindow.setContent(new RemoveFriend(connectionWindow.getContentId(),
                            connectionWindow, friendActionModel, userUuid, friendUuid));

                    //modalwindow handler 
                    connectionWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
                        private static final long serialVersionUID = 1L;

                        public void onClose(AjaxRequestTarget target) {
                            if (friendActionModel.isRemoved()) {

                                //decrement number of friends
                                numConfirmedFriends--;

                                //remove friend item from display
                                target.appendJavaScript("$('#" + item.getMarkupId() + "').slideUp();");

                                //update label
                                target.add(confirmedFriendsHeading);

                                //if none left, hide whole thing
                                if (numConfirmedFriends == 0) {
                                    target.appendJavaScript(
                                            "$('#" + confirmedFriendsContainer.getMarkupId() + "').fadeOut();");
                                }
                            }
                        }
                    });

                    connectionWindow.show(target);
                    target.appendJavaScript("fixWindowVertical();");
                }
            };
            //ContextImage removeConnectionIcon = new ContextImage("removeConnectionIcon",new Model<String>(ProfileConstants.DELETE_IMG));
            removeConnectionLink.add(new AttributeModifier("alt", true, new StringResourceModel(
                    "accessibility.connection.remove", null, new Object[] { displayName })));
            //removeConnectionLink.add(removeConnectionIcon);
            removeConnectionLink
                    .add(new AttributeModifier("title", true, new ResourceModel("link.title.removefriend")));
            removeConnectionLink
                    .add(new Label("removeConnectionLabel", new ResourceModel("button.friend.remove"))
                            .setOutputMarkupId(true));
            c1.add(removeConnectionLink);
            item.add(c1);

            //can only delete if own connections
            if (!ownList) {
                removeConnectionLink.setEnabled(false);
                removeConnectionLink.setVisible(false);
            }

            WebMarkupContainer c2 = new WebMarkupContainer("viewFriendsContainer");
            c2.setOutputMarkupId(true);

            final AjaxLink<String> viewFriendsLink = new AjaxLink<String>("viewFriendsLink") {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {
                    // always ViewFriends because a user isn't connected to himself
                    setResponsePage(new ViewFriends(personUuid));
                }
            };
            final Label viewFriendsLabel = new Label("viewFriendsLabel",
                    new ResourceModel("link.view.friends"));
            viewFriendsLink.add(viewFriendsLabel);

            //hide if not allowed
            if (!privacyLogic.isActionAllowed(userUuid, currentUserUuid,
                    PrivacyType.PRIVACY_OPTION_MYFRIENDS)) {
                viewFriendsLink.setEnabled(false);
                c2.setVisible(false);
            }
            viewFriendsLink.setOutputMarkupId(true);
            c2.add(viewFriendsLink);
            item.add(c2);

            WebMarkupContainer c3 = new WebMarkupContainer("emailContainer");
            c3.setOutputMarkupId(true);

            ExternalLink emailLink = new ExternalLink("emailLink", "mailto:" + person.getProfile().getEmail(),
                    new ResourceModel("profile.email").getObject());

            c3.add(emailLink);

            if (StringUtils.isBlank(person.getProfile().getEmail())
                    || false == privacyLogic.isActionAllowed(person.getUuid(), currentUserUuid,
                            PrivacyType.PRIVACY_OPTION_CONTACTINFO)) {

                c3.setVisible(false);
            }
            item.add(c3);

            WebMarkupContainer c4 = new WebMarkupContainer("websiteContainer");
            c4.setOutputMarkupId(true);

            // TODO home page, university profile URL or academic/research URL (see PRFL-35)
            ExternalLink websiteLink = new ExternalLink("websiteLink", person.getProfile().getHomepage(),
                    new ResourceModel("profile.homepage").getObject()).setPopupSettings(new PopupSettings());

            c4.add(websiteLink);

            if (StringUtils.isBlank(person.getProfile().getHomepage())
                    || false == privacyLogic.isActionAllowed(person.getUuid(), currentUserUuid,
                            PrivacyType.PRIVACY_OPTION_CONTACTINFO)) {

                c4.setVisible(false);
            }
            item.add(c4);

            // basic info can be set to 'only me' so still need to check
            if (true == privacyLogic.isActionAllowed(person.getUuid(), currentUserUuid,
                    PrivacyType.PRIVACY_OPTION_BASICINFO)) {

                item.add(new Label("connectionSummary", StringUtils
                        .abbreviate(ProfileUtils.stripHtml(person.getProfile().getPersonalSummary()), 200)));
            } else {
                item.add(new Label("connectionSummary", ""));
            }

            item.setOutputMarkupId(true);
        }

    };
    confirmedFriendsDataView.setOutputMarkupId(true);
    confirmedFriendsDataView.setItemsPerPage(ProfileConstants.MAX_CONNECTIONS_PER_PAGE);

    confirmedFriendsContainer.add(confirmedFriendsDataView);

    //add results container
    add(confirmedFriendsContainer);

    //add window
    add(connectionWindow);

    //add pager
    AjaxPagingNavigator pager = new AjaxPagingNavigator("navigator", confirmedFriendsDataView);
    add(pager);

    //initially, if no friends, hide container and pager
    if (numConfirmedFriends == 0) {
        confirmedFriendsContainer.setVisible(false);
        pager.setVisible(false);
    }

    //also, if num less than num required for pager, hide it
    if (numConfirmedFriends <= ProfileConstants.MAX_CONNECTIONS_PER_PAGE) {
        pager.setVisible(false);
    }

}

From source file:org.sakaiproject.profile2.tool.pages.panels.MessageThreadsView.java

License:Educational Community License

public MessageThreadsView(final String id) {
    super(id);//  w  w w .  j  ava  2  s  . c  o m

    log.debug("MessageThreads()");

    //get current user
    final String currentUserUuid = sakaiProxy.getCurrentUserId();

    //heading
    /*
    Label heading = new Label("messageThreadListHeading", new ResourceModel("heading.messages"));
    add(heading);
    */

    //no messages label
    Label noMessagesLabel = new Label("noMessagesLabel");
    noMessagesLabel.setOutputMarkupPlaceholderTag(true);
    add(noMessagesLabel);

    //container which wraps list
    final WebMarkupContainer messageThreadListContainer = new WebMarkupContainer("messageThreadListContainer");
    messageThreadListContainer.setOutputMarkupId(true);

    //get our list of messages
    final MessageThreadsDataProvider provider = new MessageThreadsDataProvider(currentUserUuid);
    int numMessages = (int) provider.size();

    //message list
    DataView<MessageThread> messageThreadList = new DataView<MessageThread>("messageThreadList", provider) {
        private static final long serialVersionUID = 1L;

        protected void populateItem(final Item<MessageThread> item) {

            final MessageThread thread = (MessageThread) item.getDefaultModelObject();
            Message message = thread.getMostRecentMessage();
            String messageFromUuid = message.getFrom();

            //we need to know if this message has been read or not so we can style it accordingly
            //we only need this if we didn't send the message
            MessageParticipant participant = null;

            boolean messageOwner = false;
            if (StringUtils.equals(messageFromUuid, currentUserUuid)) {
                messageOwner = true;
            }
            if (!messageOwner) {
                participant = messagingLogic.getMessageParticipant(message.getId(), currentUserUuid);
            }

            //prefs and privacy
            ProfilePreferences prefs = preferencesLogic.getPreferencesRecordForUser(messageFromUuid);
            ProfilePrivacy privacy = privacyLogic.getPrivacyRecordForUser(messageFromUuid);

            //photo link
            AjaxLink<String> photoLink = new AjaxLink<String>("photoLink", new Model<String>(messageFromUuid)) {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {
                    setResponsePage(new ViewProfile(getModelObject()));
                }

            };

            //photo
            ProfileImage messagePhoto = new ProfileImage("messagePhoto", new Model<String>(messageFromUuid));
            messagePhoto.setSize(ProfileConstants.PROFILE_IMAGE_THUMBNAIL);
            photoLink.add(messagePhoto);
            item.add(photoLink);

            //name link
            AjaxLink<String> messageFromLink = new AjaxLink<String>("messageFromLink",
                    new Model<String>(messageFromUuid)) {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {
                    setResponsePage(new ViewProfile(getModelObject()));
                }

            };
            messageFromLink.add(new Label("messageFromName",
                    new Model<String>(sakaiProxy.getUserDisplayName(messageFromUuid))));
            item.add(messageFromLink);

            //date
            item.add(new Label("messageDate", ProfileUtils.convertDateToString(message.getDatePosted(),
                    ProfileConstants.MESSAGE_DISPLAY_DATE_FORMAT)));

            //subject link
            AjaxLink<MessageThread> messageSubjectLink = new AjaxLink<MessageThread>("messageSubjectLink",
                    new Model<MessageThread>(thread)) {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {
                    //load messageview panel
                    //setResponsePage(new MyMessageView(id, currentUserUuid, getModelObject().getId(), getModelObject().getSubject()));

                    //load MyMessages with some params that will then load a diff tab panel and show this message panel.
                    setResponsePage(new MyMessages(thread.getId()));

                }

            };
            messageSubjectLink.add(new Label("messageSubject", new Model<String>(thread.getSubject())));
            item.add(messageSubjectLink);

            //message body
            item.add(new Label("messageBody", new Model<String>(StringUtils.abbreviate(message.getMessage(),
                    ProfileConstants.MESSAGE_PREVIEW_MAX_LENGTH))));

            //unread notice for accessibility, off unless its new.
            Label messageUnreadNotice = new Label("messageUnreadNotice",
                    new ResourceModel("accessibility.messages.unread"));
            messageUnreadNotice.setVisible(false);
            item.add(messageUnreadNotice);

            //highlight if new, also render accessibility notice
            if (!messageOwner && !participant.isRead()) {
                item.add(new AttributeAppender("class", true, new Model<String>("unread-message"), " "));
                messageUnreadNotice.setVisible(true);
            }

            item.setOutputMarkupId(true);
        }

    };
    messageThreadList.setOutputMarkupId(true);
    messageThreadList.setItemsPerPage(ProfileConstants.MAX_MESSAGES_PER_PAGE);
    messageThreadListContainer.add(messageThreadList);
    add(messageThreadListContainer);

    //pager
    AjaxPagingNavigator pager = new AjaxPagingNavigator("navigator", messageThreadList);
    add(pager);

    //initially, if no message threads to show, hide container and pager, set and show label
    if (numMessages == 0) {
        messageThreadListContainer.setVisible(false);
        pager.setVisible(false);

        noMessagesLabel.setDefaultModel(new ResourceModel("text.messages.none"));
        noMessagesLabel.setVisible(true);
    }

    //also, if num less than num required for pager, hide it
    if (numMessages <= ProfileConstants.MAX_MESSAGES_PER_PAGE) {
        pager.setVisible(false);
    }
}

From source file:org.sakaiproject.profile2.tool.pages.panels.MessageView.java

License:Educational Community License

/**
 * Does the actual rendering of the page
 * @param currentUserUuid/*from w  w  w.j  a v a2  s.  c  o  m*/
 * @param threadId
 * @param threadSubject
 */
private void renderMyMessagesView(final String currentUserUuid, final String threadId,
        final String threadSubject) {

    //details container
    WebMarkupContainer messageDetailsContainer = new WebMarkupContainer("messageDetailsContainer");
    messageDetailsContainer.setOutputMarkupId(true);

    //thread subject
    Label threadSubjectLabel = new Label("threadSubject", new Model<String>(threadSubject));
    messageDetailsContainer.add(threadSubjectLabel);

    add(messageDetailsContainer);

    //list container
    messageListContainer = new WebMarkupContainer("messageListContainer");
    messageListContainer.setOutputMarkupId(true);

    //get our list of messages
    final MessagesDataProvider provider = new MessagesDataProvider(threadId);

    messageList = new DataView<Message>("messageList", provider) {
        private static final long serialVersionUID = 1L;

        protected void populateItem(final Item<Message> item) {

            final Message message = (Message) item.getDefaultModelObject();
            final String messageFromUuid = message.getFrom();

            //we need to know if this message has been read or not so we can style it accordingly
            //we only need this if we didn't send the message
            MessageParticipant participant = null;

            boolean messageOwner = false;
            if (StringUtils.equals(messageFromUuid, currentUserUuid)) {
                messageOwner = true;
            }
            if (!messageOwner) {
                participant = messagingLogic.getMessageParticipant(message.getId(), currentUserUuid);
            }

            //prefs and privacy
            ProfilePreferences prefs = preferencesLogic.getPreferencesRecordForUser(messageFromUuid);
            ProfilePrivacy privacy = privacyLogic.getPrivacyRecordForUser(messageFromUuid);

            //photo link
            AjaxLink<String> photoLink = new AjaxLink<String>("photoLink", new Model<String>(messageFromUuid)) {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {
                    setResponsePage(new ViewProfile(getModelObject()));
                }

            };

            //photo
            /* disabled for now
            ProfileImage messagePhoto = new ProfileImage("messagePhoto", new Model<String>(messageFromUuid));
            messagePhoto.setSize(ProfileConstants.PROFILE_IMAGE_THUMBNAIL);
            photoLink.add(messagePhoto);
            */
            item.add(photoLink);

            //name link
            AjaxLink<String> messageFromLink = new AjaxLink<String>("messageFromLink",
                    new Model<String>(messageFromUuid)) {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {
                    setResponsePage(new ViewProfile(getModelObject()));
                }

            };
            messageFromLink.add(new Label("messageFromName",
                    new Model<String>(sakaiProxy.getUserDisplayName(messageFromUuid))));
            item.add(messageFromLink);

            //date
            item.add(new Label("messageDate", ProfileUtils.convertDateToString(message.getDatePosted(),
                    ProfileConstants.MESSAGE_DISPLAY_DATE_FORMAT)));

            //message body
            item.add(new Label("messageBody", new Model<String>(message.getMessage())));

            //highlight if new, then mark it as read
            if (!messageOwner && !participant.isRead()) {
                item.add(new AttributeAppender("class", true, new Model<String>("unread-message"), " "));
                messagingLogic.toggleMessageRead(participant, true);

                //set param for first unread message in the thread
                if (!lastUnreadSet) {
                    lastUnreadSet = true;
                    item.add(new AttributeModifier("rel", true, new Model<String>("lastUnread")));
                }

            }

            item.setOutputMarkupId(true);

        }

    };
    messageList.setOutputMarkupId(true);
    messageListContainer.add(messageList);
    add(messageListContainer);

    //reply form
    StringModel stringModel = new StringModel();
    Form<StringModel> replyForm = new Form<StringModel>("replyForm", new Model<StringModel>(stringModel));

    //form feedback
    final Label formFeedback = new Label("formFeedback");
    formFeedback.setOutputMarkupPlaceholderTag(true);
    add(formFeedback);

    //reply field
    replyForm.add(new Label("replyLabel", new ResourceModel("message.reply")));
    final TextArea<StringModel> replyField = new TextArea<StringModel>("replyField",
            new PropertyModel<StringModel>(stringModel, "string"));
    replyField.setRequired(true);
    replyField.setOutputMarkupId(true);
    replyForm.add(replyField);

    //reply button
    IndicatingAjaxButton replyButton = new IndicatingAjaxButton("replyButton", replyForm) {
        private static final long serialVersionUID = 1L;

        protected void onSubmit(AjaxRequestTarget target, Form form) {

            StringModel stringModel = (StringModel) form.getModelObject();
            String reply = stringModel.getString();

            //create a direct link to view this message thread
            //String messageLink = sakaiProxy.getDirectUrlToUserProfile(newMessage.getTo(), urlFor(MyMessageView.class, new PageParameters("thread=" + threadId)).toString());

            //send it, get Message back so we can add it to the list
            Message message = messagingLogic.replyToThread(threadId, reply, currentUserUuid);
            if (message != null) {
                //clear this field
                replyField.setModelObject(null);
                target.add(replyField);

                //create new item and add it to the list
                //do we need to register this with the listview?
                Component item = buildItem(message);
                target.prependJavaScript(String.format(
                        "var item=document.createElement('%s');item.id='%s';Wicket.$('%s').appendChild(item);",
                        "tr", item.getMarkupId(), messageListContainer.getMarkupId()));
                target.add(item);

                //repaint the list of messages in this thread
                //target.addComponent(messageListContainer);

                //resize
                target.appendJavaScript("setMainFrameHeight(window.name);");
            }

        }

        protected void onError(AjaxRequestTarget target, Form form) {

            //validate
            if (!replyField.isValid()) {
                formFeedback.setDefaultModel(new ResourceModel("error.message.required.body"));
            }
            formFeedback.add(new AttributeModifier("class", true, new Model<String>("alertMessage")));
            target.add(formFeedback);
        }
    };
    replyForm.add(replyButton);
    replyButton.setModel(new ResourceModel("button.message.send"));

    add(replyForm);

}