org.eurekastreams.web.client.ui.common.pagedlist.PersonRequestingGroupMembershipRenderer.java Source code

Java tutorial

Introduction

Here is the source code for org.eurekastreams.web.client.ui.common.pagedlist.PersonRequestingGroupMembershipRenderer.java

Source

/*
 * Copyright (c) 2010 Lockheed Martin Corporation
 *
 * Licensed under the Apache 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.apache.org/licenses/LICENSE-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.eurekastreams.web.client.ui.common.pagedlist;

import org.eurekastreams.server.action.request.profile.RequestForGroupMembershipRequest;
import org.eurekastreams.server.action.request.profile.SetFollowingStatusRequest;
import org.eurekastreams.server.domain.EntityType;
import org.eurekastreams.server.domain.Follower;
import org.eurekastreams.server.search.modelview.PersonModelView;
import org.eurekastreams.web.client.jsni.WidgetJSNIFacadeImpl;
import org.eurekastreams.web.client.model.GroupMembersModel;
import org.eurekastreams.web.client.model.GroupMembershipRequestModel;
import org.eurekastreams.web.client.ui.common.PersonPanel;
import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;

/**
 * Renders people who are requesting group membership.
 */
public class PersonRequestingGroupMembershipRenderer implements ItemRenderer<PersonModelView> {
    /** Group id for group renderer is used for. */
    private long groupId;

    /** Group shortname for group renderer is used for. */
    private String groupShortname;

    /**
     * Constructor.
     *
     * @param inGroupId
     *            Group id for group renderer is used for.
     * @param inGroupShortname
     *            Group shortname for group renderer is used for.
     */
    public PersonRequestingGroupMembershipRenderer(final long inGroupId, final String inGroupShortname) {
        groupId = inGroupId;
        groupShortname = inGroupShortname;
    }

    /**
     * {@inheritDoc}
     */
    public Panel render(final PersonModelView item) {
        Panel panel = new FlowPanel();
        panel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pendingGroupMembershipItem());

        // -- build UI --

        // buttons panel (left side)

        final Panel buttonsPanel = new FlowPanel();
        buttonsPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().pendingButtons());

        final Label approveButton = new Label("Approve");
        approveButton.addStyleName(StaticResourceBundle.INSTANCE.coreCss().approveButton());
        buttonsPanel.add(approveButton);

        final Label denyButton = new Label("Deny");
        denyButton.addStyleName(StaticResourceBundle.INSTANCE.coreCss().denyButton());
        buttonsPanel.add(denyButton);

        // person panel (right side)
        panel.add(new PersonPanel(item, false, true));
        panel.add(buttonsPanel);

        // -- wire events --

        approveButton.addClickHandler(new ClickHandler() {
            public void onClick(final ClickEvent event) {
                buttonsPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().waitActive());

                GroupMembersModel.getInstance().insert(new SetFollowingStatusRequest(item.getAccountId(),
                        groupShortname, EntityType.GROUP, false, Follower.FollowerStatus.FOLLOWING));
            }
        });

        denyButton.addClickHandler(new ClickHandler() {
            public void onClick(final ClickEvent event) {
                if (new WidgetJSNIFacadeImpl().confirm("Are you sure you want to deny this user membership?")) {
                    buttonsPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().waitActive());

                    GroupMembershipRequestModel.getInstance()
                            .delete(new RequestForGroupMembershipRequest(groupId, item.getEntityId()));
                }
            }
        });

        return panel;
    }
}