/** * Copyright (c) 2008-2012 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sakaiproject.profile2.tool.pages.panels; import org.apache.log4j.Logger; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.GridView; import org.apache.wicket.markup.repeater.data.IDataProvider; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.sakaiproject.profile2.logic.ProfileLogic; import org.sakaiproject.profile2.logic.SakaiProxy; import org.sakaiproject.profile2.model.GalleryImage; import org.sakaiproject.profile2.tool.components.GalleryImageRenderer; import org.sakaiproject.profile2.tool.dataproviders.GalleryImageRandomizedDataProvider; import org.sakaiproject.profile2.tool.pages.MyPictures; import org.sakaiproject.profile2.tool.pages.ViewPicture; import org.sakaiproject.profile2.tool.pages.ViewPictures; /** * Gallery image feed component which sits on MyProfile/ViewProfile. * * @author d.b.robinson@lancaster.ac.uk */ public class GalleryFeed extends Panel { private static final long serialVersionUID = 1L; private static final Logger log = Logger.getLogger(GalleryFeed.class); @SpringBean(name="org.sakaiproject.profile2.logic.SakaiProxy") private SakaiProxy sakaiProxy; @SpringBean(name="org.sakaiproject.profile2.logic.ProfileLogic") private ProfileLogic profileLogic; @SuppressWarnings("unchecked") public GalleryFeed(String id, final String ownerUserId, final String viewingUserId) { super(id); log.debug("GalleryFeed()"); Label heading; if (viewingUserId.equals(ownerUserId)) { heading = new Label("heading", new ResourceModel( "heading.widget.my.pictures")); } else { heading = new Label("heading", new StringResourceModel( "heading.widget.view.pictures", null, new Object[] { sakaiProxy.getUserDisplayName(ownerUserId) })); } add(heading); IDataProvider dataProvider = new GalleryImageRandomizedDataProvider(ownerUserId); GridView dataView = new GridView("rows", dataProvider) { private static final long serialVersionUID = 1L; @Override protected void populateEmptyItem(Item item) { // TODO make "fake" clickable Link emptyImageLink = new Link("galleryFeedItem") { public void onClick() { } }; Label galleryFeedPicture = new Label("galleryImageThumbnailRenderer", ""); emptyImageLink.add(galleryFeedPicture); item.add(emptyImageLink); } @Override protected void populateItem(Item item) { final GalleryImage image = (GalleryImage) item.getModelObject(); GalleryImageRenderer galleryImageThumbnailRenderer = new GalleryImageRenderer( "galleryImageThumbnailRenderer", image .getThumbnailResource()); AjaxLink galleryFeedItem = new AjaxLink("galleryFeedItem") { @Override public void onClick(AjaxRequestTarget target) { // view-only (i.e. no edit functionality) setResponsePage(new ViewPicture(image)); } }; galleryFeedItem.add(galleryImageThumbnailRenderer); item.add(galleryFeedItem); } }; // limit gallery to 3x2 thumbnails dataView.setColumns(3); dataView.setRows(2); add(dataView); AjaxLink viewPicturesLink = new AjaxLink("viewPicturesLink") { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { if (sakaiProxy.isSuperUserAndProxiedToUser(ownerUserId)) { setResponsePage(new ViewPictures(ownerUserId)); } else if (viewingUserId.equals(ownerUserId)) { setResponsePage(new MyPictures()); } else { setResponsePage(new ViewPictures(ownerUserId)); } } }; Label numPicturesLabel = new Label("numPicturesLabel"); add(numPicturesLabel); Label viewPicturesLabel; if (dataView.getItemCount() == 0) { numPicturesLabel.setDefaultModel(new ResourceModel( "text.gallery.feed.num.none")); viewPicturesLabel = new Label("viewPicturesLabel", new ResourceModel("link.gallery.feed.addnew")); if (!viewingUserId.equals(ownerUserId) || sakaiProxy.isSuperUserAndProxiedToUser(ownerUserId)) { viewPicturesLink.setVisible(false); } } else { numPicturesLabel.setVisible(false); viewPicturesLabel = new Label("viewPicturesLabel", new ResourceModel("link.gallery.feed.view")); } viewPicturesLink.add(viewPicturesLabel); add(viewPicturesLink); } }