Package org.dcarew.tado.views

Source Code of org.dcarew.tado.views.TaDoView$FeedContentProvider

package org.dcarew.tado.views;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.dcarew.tado.TaDoPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.FeedException;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;

// TODO: sort completed to bottome

// TODO: sort by date

// TODO: add an add button

// TODO: error reporting

/**
*
*
* @author Devon Carew
*/
public class TaDoView
  extends ViewPart
{
  private TreeViewer      viewer;
 
  private Action        action1;
  private Action        action2;
 
  private static String     FEED1 = "http://dcarew.tadalist.com/lists/1041103.rss?token=ce11666ad961375ed2987d7ff940b767";
  private static String     FEED2 = "http://dcarew.tadalist.com/lists/1041106.rss?token=ce11666ad961375ed2987d7ff940b767";
  private static String    FEED3 = "http://dcarew.tadalist.com/lists/1041149.rss?token=ce11666ad961375ed2987d7ff940b767";
 
 
  public TaDoView()
  {
   
  }

  /**
   * This is a callback that will allow us to create the viewer and initialize it.
   */
  public void createPartControl(Composite parent)
  {
    viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new FeedContentProvider());
    viewer.setLabelProvider(new DecoratingLabelProvider(new FeedLabelProvider(), null));
   
    makeActions();
    hookContextMenu();
    hookDoubleClickAction();
    contributeToActionBars();
   
    Job job = new Job("Update Ta-da view") {
      protected IStatus run(IProgressMonitor monitor)
      {
        updateUI(getFeedData());
        return Status.OK_STATUS;
      }
    };
   
    job.setSystem(true);
    job.schedule(1000);
  }

  protected List getFeedData()
  {
    String[]   urls = new String[] { FEED1, FEED2, FEED3 };
    List     feeds = new ArrayList();
   
    for (int i = 0; i < urls.length; i++)
    {
      try
      {
        URL url = new URL(urls[i]);
       
        SyndFeedInput input = new SyndFeedInput();
        feeds.add(new PathElement(input.build(new XmlReader(url))));
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
   
    return feeds;
  }

  protected void updateUI(final List feeds)
  {
    Display.getDefault().asyncExec(new Runnable() {
      public void run() {
        viewer.setInput(feeds);
        viewer.expandToLevel(2);
      }
    });
  }

  private void hookContextMenu()
  {
   
  }

  private void contributeToActionBars()
  {
    IActionBars bars = getViewSite().getActionBars();
   
    fillLocalPullDown(bars.getMenuManager());
    fillLocalToolBar(bars.getToolBarManager());
  }
 
  private void fillLocalPullDown(IMenuManager manager)
  {
   
  }
 
  private void fillLocalToolBar(IToolBarManager manager)
  {
    manager.add(action1);
    manager.add(action2);
  }
 
  private void makeActions()
  {
    action1 = new Action() {
      public void run() {
       
      }
    };
    action1.setText("Action 1");
    action1.setToolTipText("Action 1 tooltip");
    action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));

    action2 = new Action() {
      public void run() {
       
      }
    };
    action2.setText("Action 2");
    action2.setToolTipText("Action 2 tooltip");
    action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
  }

  protected void printFeed(String string)
  {
    try
    {
      URL url = new URL(string);
     
      SyndFeedInput input = new SyndFeedInput();
      SyndFeed feed = input.build(new XmlReader(url));
     
      System.out.println(feed);
    }
    catch (IOException ioe)
    {
      ioe.printStackTrace();
    }
    catch (FeedException fe)
    {
      fe.printStackTrace();
    }
  }

  private void hookDoubleClickAction()
  {
    viewer.addDoubleClickListener(new IDoubleClickListener() {
      public void doubleClick(DoubleClickEvent event) {
        //doubleClickAction.run();
      }
    });
  }

//  private void showMessage(String message)
//  {
//    MessageDialog.openInformation(viewer.getControl().getShell(), "TaDo", message);
//  }

  /**
   * Passing the focus request to the viewer's control.
   */
  public void setFocus()
  {
    viewer.getControl().setFocus();
  }
 
  private static class FeedContentProvider
    implements ITreeContentProvider
  {
   
   
    public FeedContentProvider()
    {
     
    }
   
    public Object[] getChildren(Object element)
    {
      if (element == null)
        return new Object[0];
     
      PathElement pe = (PathElement)element;
     
      if (pe.getData() instanceof SyndFeed)
      {
        SyndFeed feed = (SyndFeed)pe.getData();
       
        Object[] entries = feed.getEntries().toArray();
       
        PathElement[] children = new PathElement[entries.length];
       
        for (int i = 0; i < children.length; i++)
        {
          children[i] = new PathElement(pe, entries[i]);
        }
       
        return children;
      }
//      else if (element instanceof SyndEntry)
//      {
//        SyndEntry entry = (SyndEntry)element;
//       
//        entry.
//      }
     
      return new Object[0];
    }
   
    public Object getParent(Object element)
    {
      if (element == null)
        return null;
      else
        return ((PathElement)element).getParent();
    }
   
    public boolean hasChildren(Object element)
    {
      return getChildren(element).length > 0;
    }
   
    public Object[] getElements(Object inputElement)
    {
      return ((List)inputElement).toArray();     
    }
   
    public void dispose()
    {
     
    }
   
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
    {
     
    }
  }
 
  static class PathElement
  {
    private PathElement parent;
    private Object     data;
   
   
    public PathElement(Object data)
    {
      this.data = data;
    }
   
    public PathElement(PathElement parent, Object data)
    {
      this.parent = parent;
      this.data = data;
    }
   
    public PathElement getParent()
    {
      return parent;
    }

    public Object getData()
    {
      return data;
    }
   
    public String toString()
    {
      return data.toString();
    }
  }
 
  static class FeedLabelProvider
    extends LabelProvider
    implements IColorProvider, IFontProvider
  {
   
    public Image getImage(Object element)
    {
      PathElement pe = (PathElement)element;
     
      if (pe.getData() instanceof SyndEntry)
      {
        if (isCompleted(element))
          return TaDoPlugin.getImage("resources/icons/brkp_obj.gif");
        else
          return TaDoPlugin.getImage("resources/icons/brkpd_obj.gif");
      }
      else if (pe.getData() instanceof SyndFeed)
      {
        return TaDoPlugin.getImage("resources/icons/singleOrientation.gif");
      }
      else
      {
        return null;
      }
    }
   
    public String getText(Object element)
    {
      String str = getText_(element);
     
      if (str.startsWith("Completed:"))
      {
        return str.substring("Completed:".length()).trim();
      }
      else if (str.startsWith("Added:"))
      {
        return str.substring("Added:".length()).trim();
      }
      else if (str.endsWith("(Ta-da list)"))
      {
        return str.substring(0, str.length() - "(Ta-da list)".length()).trim();
      }
     
      return str;
    }
   
    private String getText_(Object element)
    {
      PathElement pe = (PathElement)element;
     
      if (pe.getData() instanceof SyndEntry)
      {
        SyndEntry entry = (SyndEntry)pe.getData();
       
        return entry.getTitle();
      }
      else if (pe.getData() instanceof SyndFeed)
      {
        SyndFeed feed = (SyndFeed)pe.getData();
       
        return feed.getTitle();
      }
     
      return "";
    }
   
    private boolean isCompleted(Object element)
    {
      String text = getText_(element);
     
      if (text != null && text.startsWith("Completed:"))
      {
        return true;
      }
     
      return false;
    }
   
    public Color getBackground(Object element)
    {
      return null;
    }
   
    public Color getForeground(Object element)
    {
      //if (isCompleted(element))
      //  return Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY);
     
      return null;
    }

    public Font getFont(Object element)
    {
      if (isCompleted(element))
        return JFaceResources.getFontRegistry().getItalic(JFaceResources.DEFAULT_FONT);
     
      return null;
    }
  }
 
}
TOP

Related Classes of org.dcarew.tado.views.TaDoView$FeedContentProvider

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.