org.sakaiproject.profile2.tool.pages.panels.GalleryFeed.java Source code

Java tutorial

Introduction

Here is the source code for org.sakaiproject.profile2.tool.pages.panels.GalleryFeed.java

Source

/**
 * 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);
    }

}