Package org.eclipse.ecf.remoteservices.rest.rss

Source Code of org.eclipse.ecf.remoteservices.rest.rss.Activator

/*******************************************************************************
* Copyright (c) 2010 Naumen. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Pavel Samolisov - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.remoteservices.rest.rss;

import java.util.Dictionary;

import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.IContainerManager;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.remoteservice.IRemoteCallListener;
import org.eclipse.ecf.remoteservice.IRemoteService;
import org.eclipse.ecf.remoteservice.IRemoteServiceRegistration;
import org.eclipse.ecf.remoteservice.client.IRemoteCallable;
import org.eclipse.ecf.remoteservice.client.IRemoteServiceClientContainerAdapter;
import org.eclipse.ecf.remoteservice.events.IRemoteCallCompleteEvent;
import org.eclipse.ecf.remoteservice.events.IRemoteCallEvent;
import org.eclipse.ecf.remoteservice.rest.IRestCall;
import org.eclipse.ecf.remoteservice.rest.RestCallFactory;
import org.eclipse.ecf.remoteservice.rest.RestCallableFactory;
import org.eclipse.ecf.remoteservice.rest.client.HttpGetRequestType;
import org.eclipse.ecf.remoteservice.rest.identity.RestNamespace;
import org.eclipse.ecf.remoteservice.rest.synd.SyndFeedResponseDeserializer;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;

import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndPerson;

public class Activator implements BundleActivator {

    private static final String REST_CONTAINER_TYPE = "ecf.rest.client";

    private static final String RSS_URL = "http://planeteclipse.org";

    private static final String RSS_PATH = "/planet/rss20.xml";

    private static final RestNamespace REST_NAMESPACE = new RestNamespace(RestNamespace.NAME, null);

    private static BundleContext context;

    private IContainer container;

    private ServiceTracker containerManagerServiceTracker;

    private IRemoteServiceRegistration registration;

    private IRemoteServiceClientContainerAdapter adapter;

    static BundleContext getContext() {
        return context;
    }

    /*
     * (non-Javadoc)
     * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
     */
    public void start(BundleContext bundleContext) throws Exception {

        Activator.context = bundleContext;

        IContainerManager containerManager = getContainerManagerService();

        container = containerManager.getContainerFactory().createContainer(REST_CONTAINER_TYPE,
                getRestID(RSS_URL));

        adapter = getRestClientContainerAdapter();

        adapter.setResponseDeserializer(new SyndFeedResponseDeserializer());

        IRemoteService restClientService = adapter.getRemoteService(registerCall().getReference());

        asyncCall(restClientService);
    }

    /*
     * (non-Javadoc)
     * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
     */
    public void stop(BundleContext bundleContext) throws Exception {
        Activator.context = null;

        if (registration != null)
            registration.unregister();

        if (container != null)
            container.disconnect();

        if (containerManagerServiceTracker != null)
            containerManagerServiceTracker.close();
    }

    private void asyncCall(IRemoteService restClientService)
    {
        System.out.println("async calling...");
        restClientService.callAsync(getRestCall(), createRemoteCallListener());
        System.out.println("async called...");
    }

    private IRemoteServiceRegistration registerCall()
    {
        IRemoteCallable callable = RestCallableFactory.createCallable(RSS_PATH, RSS_PATH, null,
                new HttpGetRequestType());

        registration = registerCallable(callable, null);

        return registration;
    }

    private void printFeedContent(SyndFeed feed)
    {
        System.out.println("Author: " + feed.getAuthor());
        System.out.println("Authors:");
        if (feed.getAuthors() != null)
        {
            for (Object author : feed.getAuthors())
            {
                System.out.println(((SyndPerson) author).getName());
                System.out.println(((SyndPerson) author).getEmail());
                System.out.println(((SyndPerson) author).getUri());
                System.out.println();
            }
        }
        System.out.println("Title: " + feed.getTitle());
        System.out.println("Title Ex: " + feed.getTitleEx());
        System.out.println("Description: " + feed.getDescription());
        System.out.println("Description Ex: " + feed.getDescriptionEx());
        System.out.println("Date" + feed.getPublishedDate());
        System.out.println("Type: " + feed.getFeedType());
        System.out.println("Encoding: " + feed.getEncoding());
        System.out.println("(C) " + feed.getCopyright());
        System.out.println();

        for (Object object : feed.getEntries())
        {
            SyndEntry entry = (SyndEntry) object;
            System.out.println(entry.getTitle() + " - " + entry.getAuthor());
            System.out.println(entry.getLink());
            for (Object contobj : entry.getContents())
            {
                SyndContent content = (SyndContent) contobj;
                System.out.println(content.getType());
                System.out.println(content.getValue());
            }

            SyndContent content = entry.getDescription();
            if (content != null)
                System.out.println(content.getValue());

            System.out.println(entry.getPublishedDate());
            System.out.println();
        }
    }

    private IRemoteCallListener createRemoteCallListener()
    {
        return new IRemoteCallListener()
        {
            public void handleEvent(IRemoteCallEvent event)
            {
                if (event instanceof IRemoteCallCompleteEvent)
                {
                    IRemoteCallCompleteEvent cce = (IRemoteCallCompleteEvent) event;
                    if (!cce.hadException())
                    {
                        System.out.println("Remote call completed successfully!");
                        SyndFeed feed = (SyndFeed) cce.getResponse();
                        printFeedContent(feed);
                    }
                    else
                    {
                        System.out.println("Remote call completed with exception: " + cce.getException());
                    }
                }
            }
        };
    }

    private ID getRestID(String uri)
    {
        return IDFactory.getDefault().createID(REST_NAMESPACE, uri);
    }

    private IRemoteServiceClientContainerAdapter getRestClientContainerAdapter()
    {
        return (IRemoteServiceClientContainerAdapter) container.getAdapter(IRemoteServiceClientContainerAdapter.class);
    }

    private IRemoteServiceRegistration registerCallable(IRemoteCallable callable, Dictionary<String, String> properties)
    {
        return adapter.registerCallables(new IRemoteCallable[]{callable}, properties);
    }

    private IRestCall getRestCall()
    {
        return RestCallFactory.createRestCall(RSS_PATH);
    }

    private IContainerManager getContainerManagerService()
    {
        if (containerManagerServiceTracker == null)
        {
            containerManagerServiceTracker = new ServiceTracker(context, IContainerManager.class.getName(), null);
            containerManagerServiceTracker.open();
        }

        return (IContainerManager) containerManagerServiceTracker.getService();
    }
}
TOP

Related Classes of org.eclipse.ecf.remoteservices.rest.rss.Activator

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.