/*
* Copyright (c) 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;
import org.eurekastreams.web.client.events.EventBus;
import org.eurekastreams.web.client.events.Observer;
import org.eurekastreams.web.client.events.StreamRequestEvent;
import org.eurekastreams.web.client.ui.Session;
import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
/**
* Widget which displays a feed icon linked to the feed for the current stream.
*/
public class StreamFeedLinkWidget extends Composite
{
/**
* Constructor.
*/
public StreamFeedLinkWidget()
{
final Anchor atomLink = new Anchor();
atomLink.addStyleName(StaticResourceBundle.INSTANCE.coreCss().streamAtomLink());
atomLink.setTarget("_blank");
initWidget(atomLink);
EventBus.getInstance().addObserver(StreamRequestEvent.class, new Observer<StreamRequestEvent>()
{
public void update(final StreamRequestEvent event)
{
atomLink.setVisible(Session.getInstance().getParameterValue("search") == null
|| Session.getInstance().getParameterValue("search").isEmpty());
if (event.getStreamId() != null)
{
atomLink.setHref("/resources/atom/stream/saved/" + event.getStreamId());
}
else
{
JSONObject query = JSONParser.parse(event.getJson()).isObject().get("query").isObject();
if (query.containsKey("organization"))
{
atomLink.setHref("/resources/atom/stream/query/organization/"
+ query.get("organization").isString().stringValue());
}
else if (query.containsKey("recipient"))
{
JSONArray recipients = query.get("recipient").isArray();
StringBuilder recipientLink = new StringBuilder();
recipientLink.append("/resources/atom/stream/query/recipient/");
for (int i = 0; i < recipients.size(); i++)
{
if (i > 0)
{
recipientLink.append(",");
}
JSONObject entityObject = recipients.get(i).isObject();
recipientLink.append(entityObject.get("type").isString().stringValue());
recipientLink.append(":");
recipientLink.append(entityObject.get("name").isString().stringValue());
}
atomLink.setHref(recipientLink.toString());
}
}
}
});
}
}