List of usage examples for org.apache.wicket.markup.repeater.data DataView DataView
protected DataView(String id, IDataProvider<T> dataProvider)
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); }