core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/extension/AbstractRSSPortalPageLayer.java
author dadubrow
Thu, 29 Jul 2010 15:30:00 -0500
changeset 1727 743cc54fdffe
parent 1721 18638adda547
child 1734 bf670d38123a
permissions -rw-r--r--
more portal changes - add kits page + pref page links to customize
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1721
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     1
package com.nokia.carbide.internal.discovery.ui.extension;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     2
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     3
import java.net.URL;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     4
import java.text.MessageFormat;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     5
import java.util.LinkedHashSet;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     6
import java.util.Set;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     7
import java.util.regex.Pattern;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     8
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
     9
import org.eclipse.jface.action.Action;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    10
import org.eclipse.jface.action.IAction;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    11
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    12
import com.nokia.carbide.discovery.ui.Activator;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    13
import com.nokia.carbide.discovery.ui.Messages;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    14
import com.nokia.carbide.internal.discovery.ui.editor.SimpleRSSReader;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    15
import com.nokia.carbide.internal.discovery.ui.editor.SimpleRSSReader.Channel;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    16
import com.nokia.carbide.internal.discovery.ui.editor.SimpleRSSReader.Item;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    17
import com.nokia.carbide.internal.discovery.ui.editor.SimpleRSSReader.Rss;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    18
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    19
public abstract class AbstractRSSPortalPageLayer extends AbstractBrowserPortalPageLayer {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    20
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    21
	private static final String[] EXCLUDE_TAGS = { 	
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    22
		"object", //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    23
		"param", //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    24
		"embed", //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    25
		"script", //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    26
		"img" //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    27
	};
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    28
	
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    29
	private static final Pattern[] EXCLUDE_TAG_PATTERNS = new Pattern[EXCLUDE_TAGS.length * 2];
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    30
	
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    31
	static {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    32
		int i = 0;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    33
		for (String tagString : EXCLUDE_TAGS) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    34
			StringBuilder sb = new StringBuilder();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    35
			sb.append('<');
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    36
			sb.append(tagString);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    37
			sb.append(" .*</"); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    38
			sb.append(tagString);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    39
			sb.append('>');
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    40
			EXCLUDE_TAG_PATTERNS[i++] = 
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    41
				Pattern.compile(sb.toString(), 
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    42
						Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    43
		}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    44
		for (String tagString : EXCLUDE_TAGS) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    45
			StringBuilder sb = new StringBuilder();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    46
			sb.append('<');
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    47
			sb.append(tagString);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    48
			sb.append(" .*/>"); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    49
			EXCLUDE_TAG_PATTERNS[i++] = 
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    50
				Pattern.compile(sb.toString(), 
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    51
						Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    52
		}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    53
	}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    54
	
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    55
	private static final String HTML_BODY_HEADER = "<html><head><title></title><style type=\"text/css\">div.item {font-family : sans-serif; font-size : 12px; margin-bottom : 16px;} div.itemBody {padding-top : 3px; padding-bottom : 3px;} div.itemInfo {background-color : #EEEEEE; color : #333333;} div.feedflare {display: none;} a.itemTitle {font-size : 12px; font-weight : bold;} a.markItemRead {font-size : 10px; color : #333333;}</style></head><body>"; //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    56
	private static final String HTML_BODY_FOOTER = "</body></html>"; //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    57
	private static final int MAX_ELEM_LEN = 256;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    58
	
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    59
	private Rss rss;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    60
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    61
	@Override
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    62
	public void init() {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    63
		URL url = getURL();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    64
		if (url != null) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    65
			try {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    66
				rss = SimpleRSSReader.readRSS(url);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    67
				displayRSS();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    68
				actionBar.hookBrowser();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    69
			} catch (Exception e) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    70
				Activator.logError(MessageFormat.format(Messages.AbstractRSSPortalPageLayer_RSSReadError, url), e);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    71
			}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    72
			actionBar.update();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    73
		}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    74
	}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    75
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    76
	private void displayRSS() {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    77
		StringBuffer buf = new StringBuffer();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    78
		buf.append(HTML_BODY_HEADER);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    79
		for (Channel channel : rss.getChannels()) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    80
			buf.append("<div class=\"channel\"><a class=\"channelName\" href=\""); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    81
			buf.append(channel.getLink().toString());
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    82
			buf.append("\">"); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    83
			buf.append(clean(channel.getTitle()));
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    84
			buf.append("</a>"); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    85
			buf.append("<div class=\"channelBody\">"); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    86
			buf.append(clean(channel.getDescription()));
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    87
			buf.append("</div><br>"); //$NON-NLS-1$
1727
743cc54fdffe more portal changes - add kits page + pref page links to customize
dadubrow
parents: 1721
diff changeset
    88
			buf.append("<ul>"); //$NON-NLS-1$
1721
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    89
			for (Item item : channel.getItems()) {
1727
743cc54fdffe more portal changes - add kits page + pref page links to customize
dadubrow
parents: 1721
diff changeset
    90
				buf.append("<li><div class=\"item\"><a class=\"itemTitle\" href=\""); //$NON-NLS-1$
1721
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    91
				buf.append(item.getLink().toString());
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    92
				buf.append("\">"); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    93
				buf.append(clean(item.getTitle()));
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    94
				buf.append("</a>"); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    95
				buf.append("<div class=\"itemBody\">"); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    96
				buf.append(clean(item.getDescription()));
1727
743cc54fdffe more portal changes - add kits page + pref page links to customize
dadubrow
parents: 1721
diff changeset
    97
				buf.append("</div></li>"); //$NON-NLS-1$
1721
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
    98
			}
1727
743cc54fdffe more portal changes - add kits page + pref page links to customize
dadubrow
parents: 1721
diff changeset
    99
			buf.append("</ul>"); //$NON-NLS-1$
1721
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   100
		}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   101
		buf.append(HTML_BODY_FOOTER);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   102
		System.out.println(buf.toString());
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   103
		browser.setText(buf.toString());
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   104
	}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   105
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   106
	private String clean(String s) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   107
		for (Pattern pattern : EXCLUDE_TAG_PATTERNS) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   108
			s = pattern.matcher(s).replaceAll(""); //$NON-NLS-1$
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   109
		}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   110
		return s.length() > MAX_ELEM_LEN ? s.substring(0, MAX_ELEM_LEN) : s;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   111
	}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   112
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   113
	@Override
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   114
	public void dispose() {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   115
	}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   116
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   117
	@Override
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   118
	protected Set<IAction> makeActions() {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   119
		Set<IAction> actions = new LinkedHashSet<IAction>();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   120
		for (IAction action : super.makeActions()) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   121
			if (action.getText().equals(Messages.AbstractBrowserPortalPage_RefreshLabel)) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   122
				IAction a = new Action(Messages.AbstractBrowserPortalPage_RefreshLabel) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   123
					@Override
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   124
					public void run() {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   125
						if (browser != null) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   126
							if (browserHasURL())
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   127
								browser.refresh();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   128
							else
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   129
								displayRSS();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   130
							actionBar.update();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   131
						}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   132
					}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   133
					
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   134
					@Override
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   135
					public boolean isEnabled() {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   136
						return browser != null ? !actionBar.isLoading() : false;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   137
					}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   138
				};
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   139
				actions.add(a);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   140
			}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   141
			else
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   142
				actions.add(action);
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   143
		}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   144
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   145
		actions.add(new Action(Messages.AbstractRSSPortalPageLayer_ReturnToFeedLabel) {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   146
			@Override
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   147
			public void run() {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   148
				displayRSS();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   149
				actionBar.update();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   150
			}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   151
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   152
			@Override
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   153
			public boolean isEnabled() {
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   154
				return browserHasURL();
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   155
			}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   156
		});
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   157
		
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   158
		return actions;
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   159
	}
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   160
18638adda547 more portal changes:
dadubrow
parents:
diff changeset
   161
}