Package org.eurekastreams.web.client.ui.common.stream.renderers

Source Code of org.eurekastreams.web.client.ui.common.stream.renderers.MetadataLinkRenderer

/*
* Copyright (c) 2009-2011 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.stream.renderers;

import org.eurekastreams.server.domain.EntityType;
import org.eurekastreams.server.domain.Page;
import org.eurekastreams.web.client.history.CreateUrlRequest;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle;

import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.InlineHyperlink;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;

/**
* Renders a metadata link like By Joe Smith.
*/
public class MetadataLinkRenderer implements StatefulRenderer
{
    /**
     * The label.
     */
    private final String label;
    /**
     * The type the entity is.
     */
    private final EntityType type;
    /**
     * The id of the entity.
     */
    private final String id;
    /**
     * the name of the entity.
     */
    private final String name;

    /**
     * Default constructor.
     *
     * @param inLabel
     *            the label.
     * @param inType
     *            the type.
     * @param inId
     *            the id.
     * @param inName
     *            the name.
     */
    public MetadataLinkRenderer(final String inLabel, final EntityType inType, final String inId, final String inName)
    {
        label = inLabel;
        type = inType;
        id = inId;
        name = inName;
    }

    /**
     * Constructor to for people.
     *
     * @param inLabel
     *            the label.
     * @param inId
     *            the id.
     * @param inName
     *            the name.
     */
    public MetadataLinkRenderer(final String inLabel, final String inId, final String inName)
    {
        this(inLabel, EntityType.PERSON, inId, inName);
    }

    /**
     * Returns a link with a label.
     *
     * @return the link.
     */
    public Widget render()
    {
        if (id != null)
        {
            String url;

            switch (type)
            {
            case PERSON:
                url = Session.getInstance().generateUrl(new CreateUrlRequest(Page.PEOPLE, id));
                break;
            case GROUP:
                url = Session.getInstance().generateUrl(new CreateUrlRequest(Page.GROUPS, id));
                break;
            case PLUGIN:
            case APPLICATION:
                // TODO: Is this correct for the new URL scheme?
                url = id;
                break;
            case RESOURCE:
            case NOTSET:
                url = id;
                break;
            default:
                url = null;
            }

            if (url == null || url.isEmpty())
            {
                return new InlineLabel(label == null || label.isEmpty() ? name : label + " " + name);
            }
            else if (label == null || label.isEmpty())
            {
                return new InlineHyperlink(name, url);
            }
            else
            {
                Panel main = new FlowPanel();
                main.addStyleName(StaticResourceBundle.INSTANCE.coreCss().inlinePanel());
                main.add(new InlineLabel(label)); // omit trailing space, since that's handled by CSS margins
                main.add(new InlineHyperlink(name, url));
                return main;
            }
        }
        else
        {
            return null;
        }
    }
}
TOP

Related Classes of org.eurekastreams.web.client.ui.common.stream.renderers.MetadataLinkRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.