<? xml version ="1.0" encoding ="UTF-8" ? > <br> < portlet-app xmlns ="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version ="1.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" id ="ru.habrahabr.rssportlet.HabraRssPortlet.a97fbe5bd1" > <br> < portlet > <br> < portlet-name > HabraRssPortlet </ portlet-name > <br> < display-name > HabraRssPortlet </ display-name > <br> < display-name xml:lang ="ru" > HabraRssPortlet </ display-name > <br> < portlet-class > ru.habrahabr.rssportlet.HabraRssPortlet </ portlet-class > <br> < init-param > <br> < name > wps.markup </ name > <br> < value > html </ value > <br> </ init-param > <br> < expiration-cache > 0 </ expiration-cache > <br> < supports > <br> < mime-type > text/html </ mime-type > <br> < portlet-mode > view </ portlet-mode > <br> < portlet-mode > edit </ portlet-mode > <br> < portlet-mode > config </ portlet-mode > <br> < portlet-mode > help </ portlet-mode > <br> </ supports > <br> < supported-locale > ru </ supported-locale > <br> < resource-bundle > ru.habrahabr.rssportlet.nl.HabraRssPortletResource </ resource-bundle > <br> < portlet-info > <br> < title > HabraRssPortlet </ title > <br> < short-title > HabraRssPortlet </ short-title > <br> < keywords > HabraRssPortlet </ keywords > <br> </ portlet-info > <br> < portlet-preferences > <br> <br> < preference > <br> < name > updateFrequency </ name > <br> <!-- in minutes --> <br> < value > 10 </ value > <br> </ preference > <br> < preference > <br> < name > itemQuantity </ name > <br> < value > 3 </ value > <br> </ preference > <br> < preference > <br> < name > rssLinks </ name > <br> < value > www.vz.ru/rss.xml </ value > <br> </ preference > <br><br> </ portlet-preferences > <br> </ portlet > <br> < custom-portlet-mode > <br> < portlet-mode > config </ portlet-mode > <br> </ custom-portlet-mode > <br> </ portlet-app > <br> <br> * This source code was highlighted with Source Code Highlighter .
<? xml version ="1.0" encoding ="UTF-8" ? > <br> < portlet-app xmlns ="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version ="1.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" id ="ru.habrahabr.rssportlet.HabraRssPortlet.a97fbe5bd1" > <br> < portlet > <br> < portlet-name > HabraRssPortlet </ portlet-name > <br> < display-name > HabraRssPortlet </ display-name > <br> < display-name xml:lang ="ru" > HabraRssPortlet </ display-name > <br> < portlet-class > ru.habrahabr.rssportlet.HabraRssPortlet </ portlet-class > <br> < init-param > <br> < name > wps.markup </ name > <br> < value > html </ value > <br> </ init-param > <br> < expiration-cache > 0 </ expiration-cache > <br> < supports > <br> < mime-type > text/html </ mime-type > <br> < portlet-mode > view </ portlet-mode > <br> < portlet-mode > edit </ portlet-mode > <br> < portlet-mode > config </ portlet-mode > <br> < portlet-mode > help </ portlet-mode > <br> </ supports > <br> < supported-locale > ru </ supported-locale > <br> < resource-bundle > ru.habrahabr.rssportlet.nl.HabraRssPortletResource </ resource-bundle > <br> < portlet-info > <br> < title > HabraRssPortlet </ title > <br> < short-title > HabraRssPortlet </ short-title > <br> < keywords > HabraRssPortlet </ keywords > <br> </ portlet-info > <br> < portlet-preferences > <br> <br> < preference > <br> < name > updateFrequency </ name > <br> <!-- in minutes --> <br> < value > 10 </ value > <br> </ preference > <br> < preference > <br> < name > itemQuantity </ name > <br> < value > 3 </ value > <br> </ preference > <br> < preference > <br> < name > rssLinks </ name > <br> < value > www.vz.ru/rss.xml </ value > <br> </ preference > <br><br> </ portlet-preferences > <br> </ portlet > <br> < custom-portlet-mode > <br> < portlet-mode > config </ portlet-mode > <br> </ custom-portlet-mode > <br> </ portlet-app > <br> <br> * This source code was highlighted with Source Code Highlighter .
<? xml version ="1.0" encoding ="UTF-8" ? > <br> < portlet-app xmlns ="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version ="1.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" id ="ru.habrahabr.rssportlet.HabraRssPortlet.a97fbe5bd1" > <br> < portlet > <br> < portlet-name > HabraRssPortlet </ portlet-name > <br> < display-name > HabraRssPortlet </ display-name > <br> < display-name xml:lang ="ru" > HabraRssPortlet </ display-name > <br> < portlet-class > ru.habrahabr.rssportlet.HabraRssPortlet </ portlet-class > <br> < init-param > <br> < name > wps.markup </ name > <br> < value > html </ value > <br> </ init-param > <br> < expiration-cache > 0 </ expiration-cache > <br> < supports > <br> < mime-type > text/html </ mime-type > <br> < portlet-mode > view </ portlet-mode > <br> < portlet-mode > edit </ portlet-mode > <br> < portlet-mode > config </ portlet-mode > <br> < portlet-mode > help </ portlet-mode > <br> </ supports > <br> < supported-locale > ru </ supported-locale > <br> < resource-bundle > ru.habrahabr.rssportlet.nl.HabraRssPortletResource </ resource-bundle > <br> < portlet-info > <br> < title > HabraRssPortlet </ title > <br> < short-title > HabraRssPortlet </ short-title > <br> < keywords > HabraRssPortlet </ keywords > <br> </ portlet-info > <br> < portlet-preferences > <br> <br> < preference > <br> < name > updateFrequency </ name > <br> <!-- in minutes --> <br> < value > 10 </ value > <br> </ preference > <br> < preference > <br> < name > itemQuantity </ name > <br> < value > 3 </ value > <br> </ preference > <br> < preference > <br> < name > rssLinks </ name > <br> < value > www.vz.ru/rss.xml </ value > <br> </ preference > <br><br> </ portlet-preferences > <br> </ portlet > <br> < custom-portlet-mode > <br> < portlet-mode > config </ portlet-mode > <br> </ custom-portlet-mode > <br> </ portlet-app > <br> <br> * This source code was highlighted with Source Code Highlighter .
package ru.habrahabr.rssportlet;
import java.io.*;
import java.util.*;
import javax.portlet.*;
public class HabraRssPortlet extends GenericPortlet {
public static final String JSP_FOLDER = "/_HabraRssPortlet/jsp/" ;
public static final String VIEW_JSP = "HabraRssPortletView" ;
public static final String EDIT_JSP = "HabraRssPortletEdit" ;
public static final String HELP_JSP = "HabraRssPortletHelp" ;
public static final String CONFIG_JSP = "HabraRssPortletConfig" ;
public static final String RSS_LINKS = "rssLinks" ;
public static final String UPDATE_FREQUENCY = "updateFrequency" ;
public static final String ITEM_QUANTITY = "itemQuantity" ;
public static final String NEW_RSS_LINK = "newRssLink" ;
public static final String ADD_NEW_RSS_LINK = "addNewRssLink" ;
public static final String DELETE_RSS_LINK = "deleteRssLink" ;
public static final String RSS_LINKS_LIST = "rssLinksList" ;
public static final String FREQUENCY = "frequency" ;
public static final String QUANTITY = "quantity" ;
public static final String SET_FREQUENCY = "setFrequency" ;
public static final String SET_QUANTITY = "setQuantity" ;
public static final String ERROR_MESSAGE = "errorMessage" ;
public static final String UPDATE_FEEDS = "updateFeeds" ;
public static final String EDIT_BACK = "editBack" ;
private static HashMap rssMap = new HashMap();
private static HashMap updateTimeMap = new HashMap();
public void doView(RenderRequest request, RenderResponse response)throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletPreferences preferences = request.getPreferences();
if (!rssMap.containsKey(request.getUserPrincipal().getName())){
rssMap.put(request.getUserPrincipal().getName(), new ArrayList ());
updateTimeMap.put(request.getUserPrincipal().getName(), new Long(0));
}
if (RssUtil.checkUpdateTime(getLastUpdateTime(request), preferences)) {
ArrayList rssItems = ( ArrayList )rssMap. get (request.getUserPrincipal().getName());
rssItems.clear();
rssItems = RssUtil.updateRssFeeds(preferences);
System. out .println( "News for user " + request.getUserPrincipal().getName() + " updated!" );
rssMap.put(request.getUserPrincipal().getName(), rssItems);
setLastUpdateTime(request);
}
int interval = Integer.parseInt(preferences.getValue(UPDATE_FREQUENCY, "60" ));
System. out .println( "Time befor update (in seconds) = " + ((interval * 60) - ((System.currentTimeMillis() - getLastUpdateTime(request).longValue()) / 1000 )));
request.setAttribute( "rssMap" , rssMap. get (request.getUserPrincipal().getName()));
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, VIEW_JSP));
rd.include(request, response);
}
public void doEdit(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
getJspFilePath(request, EDIT_JSP));
rd.include(request, response);
}
protected void doHelp(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, HELP_JSP));
rd.include(request, response);
}
public void processAction(ActionRequest request, ActionResponse response)
throws PortletException, java.io.IOException {
PortletPreferences preferences = request.getPreferences();
if (request.getParameter(ADD_NEW_RSS_LINK) != null ) {
if (request.getParameter(NEW_RSS_LINK).trim().length() > 0) {
String [] links = ( String []) preferences.getValues(HabraRssPortlet.RSS_LINKS, null );
String newLink = request.getParameter(NEW_RSS_LINK);
preferences.setValues(RSS_LINKS, addToArray(links, newLink));
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> New rss link added " + newLink);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Link must be not empty!" );
}
}
if (request.getParameter(DELETE_RSS_LINK) != null ) {
if (request.getParameter(RSS_LINKS_LIST) != null
&& request.getParameter(RSS_LINKS_LIST).trim().length() > 0 ) {
String [] links = ( String []) preferences.getValues(
HabraRssPortlet.RSS_LINKS, null );
String deletedLink = request.getParameter(RSS_LINKS_LIST);
if (isFound(links, deletedLink)) {
preferences.setValues(RSS_LINKS, deleteFromArray(links, deletedLink));
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Rss link deleted " + deletedLink);
}
} else {
response.setRenderParameter(ERROR_MESSAGE, "Choose a link!" );
}
}
if (request.getParameter(SET_FREQUENCY) != null ) {
if (request.getParameter(FREQUENCY).trim().length() > 0
&& isDigit(request.getParameter(FREQUENCY))) {
String frequency = request.getParameter(FREQUENCY);
preferences.setValue(UPDATE_FREQUENCY, frequency);
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Frequency updated " + frequency);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Set valid frequency!" );
}
}
if (request.getParameter(SET_QUANTITY) != null ) {
if (request.getParameter(QUANTITY).trim().length() > 0
&& isDigit(request.getParameter(QUANTITY))) {
String quantity = request.getParameter(QUANTITY);
preferences.setValue(ITEM_QUANTITY, quantity);
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Quantity updated " + quantity);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Set valid quantity!" );
}
}
if (request.getParameter(UPDATE_FEEDS) != null ) {
ArrayList rssItems = ( ArrayList )rssMap. get (request.getUserPrincipal().getName());
rssItems.clear();
rssItems = RssUtil.updateRssFeeds(preferences);
System. out .println( "News fo user " + request.getUserPrincipal().getName() + " updated!" );
rssMap.put(request.getUserPrincipal().getName(), rssItems);
setLastUpdateTime(request);
}
if (request.getParameter(EDIT_BACK) != null ) {
response.setPortletMode(PortletMode.VIEW);
}
}
private static String getJspFilePath(RenderRequest request, String jspFile) {
String markup = request.getProperty( "wps.markup" );
if (markup == null )
markup = getMarkup(request.getResponseContentType());
return JSP_FOLDER + markup + "/" + jspFile + "."
+ getJspExtension(markup);
}
private static String getMarkup( String contentType) {
if ( "text/vnd.wap.wml" .equals(contentType))
return "wml" ;
else
return "html" ;
}
private static String getJspExtension( String markupName) {
return "jsp" ;
}
private static String [] addToArray( String [] array, String s) {
String [] ans = new String [array.length + 1];
System.arraycopy(array, 0, ans, 0, array.length);
ans[ans.length - 1] = s;
return ans;
}
private static String [] deleteFromArray( String [] array, String s) {
String [] ans = new String [array.length - 1];
int addIndex = 0;
for ( int i = 0; i < array.length; i++) {
if (array[i].equals(s)) {
addIndex++;
continue ;
}
ans[i - addIndex] = array[i];
}
return ans;
}
private static boolean isFound( String [] array, String s) {
boolean found = false ;
for ( int i = 0; i < array.length; i++) {
if (array[i].equals(s)) {
found = true ;
break ;
}
}
return found;
}
private static boolean isDigit( String s) {
char [] array = s.toCharArray();
for ( int i = 0; i < array.length; i++) {
if (!Character.isDigit(array[i])) {
return false ;
}
}
return true ;
}
private static Long getLastUpdateTime(PortletRequest request){
return (Long)updateTimeMap. get (request.getUserPrincipal().getName());
}
private static void setLastUpdateTime(PortletRequest request){
updateTimeMap.put(request.getUserPrincipal().getName(), new Long(System.currentTimeMillis()));
}
}
* This source code was highlighted with Source Code Highlighter .
package ru.habrahabr.rssportlet;
import java.io.*;
import java.util.*;
import javax.portlet.*;
public class HabraRssPortlet extends GenericPortlet {
public static final String JSP_FOLDER = "/_HabraRssPortlet/jsp/" ;
public static final String VIEW_JSP = "HabraRssPortletView" ;
public static final String EDIT_JSP = "HabraRssPortletEdit" ;
public static final String HELP_JSP = "HabraRssPortletHelp" ;
public static final String CONFIG_JSP = "HabraRssPortletConfig" ;
public static final String RSS_LINKS = "rssLinks" ;
public static final String UPDATE_FREQUENCY = "updateFrequency" ;
public static final String ITEM_QUANTITY = "itemQuantity" ;
public static final String NEW_RSS_LINK = "newRssLink" ;
public static final String ADD_NEW_RSS_LINK = "addNewRssLink" ;
public static final String DELETE_RSS_LINK = "deleteRssLink" ;
public static final String RSS_LINKS_LIST = "rssLinksList" ;
public static final String FREQUENCY = "frequency" ;
public static final String QUANTITY = "quantity" ;
public static final String SET_FREQUENCY = "setFrequency" ;
public static final String SET_QUANTITY = "setQuantity" ;
public static final String ERROR_MESSAGE = "errorMessage" ;
public static final String UPDATE_FEEDS = "updateFeeds" ;
public static final String EDIT_BACK = "editBack" ;
private static HashMap rssMap = new HashMap();
private static HashMap updateTimeMap = new HashMap();
public void doView(RenderRequest request, RenderResponse response)throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletPreferences preferences = request.getPreferences();
if (!rssMap.containsKey(request.getUserPrincipal().getName())){
rssMap.put(request.getUserPrincipal().getName(), new ArrayList ());
updateTimeMap.put(request.getUserPrincipal().getName(), new Long(0));
}
if (RssUtil.checkUpdateTime(getLastUpdateTime(request), preferences)) {
ArrayList rssItems = ( ArrayList )rssMap. get (request.getUserPrincipal().getName());
rssItems.clear();
rssItems = RssUtil.updateRssFeeds(preferences);
System. out .println( "News for user " + request.getUserPrincipal().getName() + " updated!" );
rssMap.put(request.getUserPrincipal().getName(), rssItems);
setLastUpdateTime(request);
}
int interval = Integer.parseInt(preferences.getValue(UPDATE_FREQUENCY, "60" ));
System. out .println( "Time befor update (in seconds) = " + ((interval * 60) - ((System.currentTimeMillis() - getLastUpdateTime(request).longValue()) / 1000 )));
request.setAttribute( "rssMap" , rssMap. get (request.getUserPrincipal().getName()));
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, VIEW_JSP));
rd.include(request, response);
}
public void doEdit(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
getJspFilePath(request, EDIT_JSP));
rd.include(request, response);
}
protected void doHelp(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, HELP_JSP));
rd.include(request, response);
}
public void processAction(ActionRequest request, ActionResponse response)
throws PortletException, java.io.IOException {
PortletPreferences preferences = request.getPreferences();
if (request.getParameter(ADD_NEW_RSS_LINK) != null ) {
if (request.getParameter(NEW_RSS_LINK).trim().length() > 0) {
String [] links = ( String []) preferences.getValues(HabraRssPortlet.RSS_LINKS, null );
String newLink = request.getParameter(NEW_RSS_LINK);
preferences.setValues(RSS_LINKS, addToArray(links, newLink));
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> New rss link added " + newLink);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Link must be not empty!" );
}
}
if (request.getParameter(DELETE_RSS_LINK) != null ) {
if (request.getParameter(RSS_LINKS_LIST) != null
&& request.getParameter(RSS_LINKS_LIST).trim().length() > 0 ) {
String [] links = ( String []) preferences.getValues(
HabraRssPortlet.RSS_LINKS, null );
String deletedLink = request.getParameter(RSS_LINKS_LIST);
if (isFound(links, deletedLink)) {
preferences.setValues(RSS_LINKS, deleteFromArray(links, deletedLink));
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Rss link deleted " + deletedLink);
}
} else {
response.setRenderParameter(ERROR_MESSAGE, "Choose a link!" );
}
}
if (request.getParameter(SET_FREQUENCY) != null ) {
if (request.getParameter(FREQUENCY).trim().length() > 0
&& isDigit(request.getParameter(FREQUENCY))) {
String frequency = request.getParameter(FREQUENCY);
preferences.setValue(UPDATE_FREQUENCY, frequency);
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Frequency updated " + frequency);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Set valid frequency!" );
}
}
if (request.getParameter(SET_QUANTITY) != null ) {
if (request.getParameter(QUANTITY).trim().length() > 0
&& isDigit(request.getParameter(QUANTITY))) {
String quantity = request.getParameter(QUANTITY);
preferences.setValue(ITEM_QUANTITY, quantity);
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Quantity updated " + quantity);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Set valid quantity!" );
}
}
if (request.getParameter(UPDATE_FEEDS) != null ) {
ArrayList rssItems = ( ArrayList )rssMap. get (request.getUserPrincipal().getName());
rssItems.clear();
rssItems = RssUtil.updateRssFeeds(preferences);
System. out .println( "News fo user " + request.getUserPrincipal().getName() + " updated!" );
rssMap.put(request.getUserPrincipal().getName(), rssItems);
setLastUpdateTime(request);
}
if (request.getParameter(EDIT_BACK) != null ) {
response.setPortletMode(PortletMode.VIEW);
}
}
private static String getJspFilePath(RenderRequest request, String jspFile) {
String markup = request.getProperty( "wps.markup" );
if (markup == null )
markup = getMarkup(request.getResponseContentType());
return JSP_FOLDER + markup + "/" + jspFile + "."
+ getJspExtension(markup);
}
private static String getMarkup( String contentType) {
if ( "text/vnd.wap.wml" .equals(contentType))
return "wml" ;
else
return "html" ;
}
private static String getJspExtension( String markupName) {
return "jsp" ;
}
private static String [] addToArray( String [] array, String s) {
String [] ans = new String [array.length + 1];
System.arraycopy(array, 0, ans, 0, array.length);
ans[ans.length - 1] = s;
return ans;
}
private static String [] deleteFromArray( String [] array, String s) {
String [] ans = new String [array.length - 1];
int addIndex = 0;
for ( int i = 0; i < array.length; i++) {
if (array[i].equals(s)) {
addIndex++;
continue ;
}
ans[i - addIndex] = array[i];
}
return ans;
}
private static boolean isFound( String [] array, String s) {
boolean found = false ;
for ( int i = 0; i < array.length; i++) {
if (array[i].equals(s)) {
found = true ;
break ;
}
}
return found;
}
private static boolean isDigit( String s) {
char [] array = s.toCharArray();
for ( int i = 0; i < array.length; i++) {
if (!Character.isDigit(array[i])) {
return false ;
}
}
return true ;
}
private static Long getLastUpdateTime(PortletRequest request){
return (Long)updateTimeMap. get (request.getUserPrincipal().getName());
}
private static void setLastUpdateTime(PortletRequest request){
updateTimeMap.put(request.getUserPrincipal().getName(), new Long(System.currentTimeMillis()));
}
}
* This source code was highlighted with Source Code Highlighter .
package ru.habrahabr.rssportlet;
import java.io.*;
import java.util.*;
import javax.portlet.*;
public class HabraRssPortlet extends GenericPortlet {
public static final String JSP_FOLDER = "/_HabraRssPortlet/jsp/" ;
public static final String VIEW_JSP = "HabraRssPortletView" ;
public static final String EDIT_JSP = "HabraRssPortletEdit" ;
public static final String HELP_JSP = "HabraRssPortletHelp" ;
public static final String CONFIG_JSP = "HabraRssPortletConfig" ;
public static final String RSS_LINKS = "rssLinks" ;
public static final String UPDATE_FREQUENCY = "updateFrequency" ;
public static final String ITEM_QUANTITY = "itemQuantity" ;
public static final String NEW_RSS_LINK = "newRssLink" ;
public static final String ADD_NEW_RSS_LINK = "addNewRssLink" ;
public static final String DELETE_RSS_LINK = "deleteRssLink" ;
public static final String RSS_LINKS_LIST = "rssLinksList" ;
public static final String FREQUENCY = "frequency" ;
public static final String QUANTITY = "quantity" ;
public static final String SET_FREQUENCY = "setFrequency" ;
public static final String SET_QUANTITY = "setQuantity" ;
public static final String ERROR_MESSAGE = "errorMessage" ;
public static final String UPDATE_FEEDS = "updateFeeds" ;
public static final String EDIT_BACK = "editBack" ;
private static HashMap rssMap = new HashMap();
private static HashMap updateTimeMap = new HashMap();
public void doView(RenderRequest request, RenderResponse response)throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletPreferences preferences = request.getPreferences();
if (!rssMap.containsKey(request.getUserPrincipal().getName())){
rssMap.put(request.getUserPrincipal().getName(), new ArrayList ());
updateTimeMap.put(request.getUserPrincipal().getName(), new Long(0));
}
if (RssUtil.checkUpdateTime(getLastUpdateTime(request), preferences)) {
ArrayList rssItems = ( ArrayList )rssMap. get (request.getUserPrincipal().getName());
rssItems.clear();
rssItems = RssUtil.updateRssFeeds(preferences);
System. out .println( "News for user " + request.getUserPrincipal().getName() + " updated!" );
rssMap.put(request.getUserPrincipal().getName(), rssItems);
setLastUpdateTime(request);
}
int interval = Integer.parseInt(preferences.getValue(UPDATE_FREQUENCY, "60" ));
System. out .println( "Time befor update (in seconds) = " + ((interval * 60) - ((System.currentTimeMillis() - getLastUpdateTime(request).longValue()) / 1000 )));
request.setAttribute( "rssMap" , rssMap. get (request.getUserPrincipal().getName()));
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, VIEW_JSP));
rd.include(request, response);
}
public void doEdit(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
getJspFilePath(request, EDIT_JSP));
rd.include(request, response);
}
protected void doHelp(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
response.setContentType(request.getResponseContentType());
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(getJspFilePath(request, HELP_JSP));
rd.include(request, response);
}
public void processAction(ActionRequest request, ActionResponse response)
throws PortletException, java.io.IOException {
PortletPreferences preferences = request.getPreferences();
if (request.getParameter(ADD_NEW_RSS_LINK) != null ) {
if (request.getParameter(NEW_RSS_LINK).trim().length() > 0) {
String [] links = ( String []) preferences.getValues(HabraRssPortlet.RSS_LINKS, null );
String newLink = request.getParameter(NEW_RSS_LINK);
preferences.setValues(RSS_LINKS, addToArray(links, newLink));
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> New rss link added " + newLink);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Link must be not empty!" );
}
}
if (request.getParameter(DELETE_RSS_LINK) != null ) {
if (request.getParameter(RSS_LINKS_LIST) != null
&& request.getParameter(RSS_LINKS_LIST).trim().length() > 0 ) {
String [] links = ( String []) preferences.getValues(
HabraRssPortlet.RSS_LINKS, null );
String deletedLink = request.getParameter(RSS_LINKS_LIST);
if (isFound(links, deletedLink)) {
preferences.setValues(RSS_LINKS, deleteFromArray(links, deletedLink));
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Rss link deleted " + deletedLink);
}
} else {
response.setRenderParameter(ERROR_MESSAGE, "Choose a link!" );
}
}
if (request.getParameter(SET_FREQUENCY) != null ) {
if (request.getParameter(FREQUENCY).trim().length() > 0
&& isDigit(request.getParameter(FREQUENCY))) {
String frequency = request.getParameter(FREQUENCY);
preferences.setValue(UPDATE_FREQUENCY, frequency);
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Frequency updated " + frequency);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Set valid frequency!" );
}
}
if (request.getParameter(SET_QUANTITY) != null ) {
if (request.getParameter(QUANTITY).trim().length() > 0
&& isDigit(request.getParameter(QUANTITY))) {
String quantity = request.getParameter(QUANTITY);
preferences.setValue(ITEM_QUANTITY, quantity);
preferences.store();
System. out .println( ">>>>>>>>>>>>>>>> Quantity updated " + quantity);
} else {
response.setRenderParameter(ERROR_MESSAGE, "Set valid quantity!" );
}
}
if (request.getParameter(UPDATE_FEEDS) != null ) {
ArrayList rssItems = ( ArrayList )rssMap. get (request.getUserPrincipal().getName());
rssItems.clear();
rssItems = RssUtil.updateRssFeeds(preferences);
System. out .println( "News fo user " + request.getUserPrincipal().getName() + " updated!" );
rssMap.put(request.getUserPrincipal().getName(), rssItems);
setLastUpdateTime(request);
}
if (request.getParameter(EDIT_BACK) != null ) {
response.setPortletMode(PortletMode.VIEW);
}
}
private static String getJspFilePath(RenderRequest request, String jspFile) {
String markup = request.getProperty( "wps.markup" );
if (markup == null )
markup = getMarkup(request.getResponseContentType());
return JSP_FOLDER + markup + "/" + jspFile + "."
+ getJspExtension(markup);
}
private static String getMarkup( String contentType) {
if ( "text/vnd.wap.wml" .equals(contentType))
return "wml" ;
else
return "html" ;
}
private static String getJspExtension( String markupName) {
return "jsp" ;
}
private static String [] addToArray( String [] array, String s) {
String [] ans = new String [array.length + 1];
System.arraycopy(array, 0, ans, 0, array.length);
ans[ans.length - 1] = s;
return ans;
}
private static String [] deleteFromArray( String [] array, String s) {
String [] ans = new String [array.length - 1];
int addIndex = 0;
for ( int i = 0; i < array.length; i++) {
if (array[i].equals(s)) {
addIndex++;
continue ;
}
ans[i - addIndex] = array[i];
}
return ans;
}
private static boolean isFound( String [] array, String s) {
boolean found = false ;
for ( int i = 0; i < array.length; i++) {
if (array[i].equals(s)) {
found = true ;
break ;
}
}
return found;
}
private static boolean isDigit( String s) {
char [] array = s.toCharArray();
for ( int i = 0; i < array.length; i++) {
if (!Character.isDigit(array[i])) {
return false ;
}
}
return true ;
}
private static Long getLastUpdateTime(PortletRequest request){
return (Long)updateTimeMap. get (request.getUserPrincipal().getName());
}
private static void setLastUpdateTime(PortletRequest request){
updateTimeMap.put(request.getUserPrincipal().getName(), new Long(System.currentTimeMillis()));
}
}
* This source code was highlighted with Source Code Highlighter .
<%@page session="false" contentType="text/html" pageEncoding="ISO-8859-1" import="java.util.*,javax.portlet.*,ru.habrahabr.rssportlet.*" %> <br> <%@taglib uri="http://java.sun.com/portlet" prefix="portlet" %> <br> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <br> < portlet:defineObjects /> <br><br><br> <% <br> if (request.getAttribute( "rssMap" ) != null ){<br> %> <br> <br> < c:forEach var ="item" items ="${rssMap}" > <br> < p > <br> < b >< a href ="${item.link}" > ${item.title} </ a ></ b > <br> < span > ${item.description} </ span > <br> </ p > <br> < hr > <br> </ c:forEach > <br> <br> <% <br> } else {<br> %> Error!!!! <% <br> }<br> %> <br><br> * This source code was highlighted with Source Code Highlighter .
<%@page session="false" contentType="text/html" pageEncoding="ISO-8859-1" import="java.util.*,javax.portlet.*,ru.habrahabr.rssportlet.*" %> <br> <%@taglib uri="http://java.sun.com/portlet" prefix="portlet" %> <br> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <br> < portlet:defineObjects /> <br><br><br> <% <br> if (request.getAttribute( "rssMap" ) != null ){<br> %> <br> <br> < c:forEach var ="item" items ="${rssMap}" > <br> < p > <br> < b >< a href ="${item.link}" > ${item.title} </ a ></ b > <br> < span > ${item.description} </ span > <br> </ p > <br> < hr > <br> </ c:forEach > <br> <br> <% <br> } else {<br> %> Error!!!! <% <br> }<br> %> <br><br> * This source code was highlighted with Source Code Highlighter .
<%@page session="false" contentType="text/html" pageEncoding="ISO-8859-1" import="java.util.*,javax.portlet.*,ru.habrahabr.rssportlet.*" %> <br> <%@taglib uri="http://java.sun.com/portlet" prefix="portlet" %> <br> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <br> < portlet:defineObjects /> <br><br><br> <% <br> if (request.getAttribute( "rssMap" ) != null ){<br> %> <br> <br> < c:forEach var ="item" items ="${rssMap}" > <br> < p > <br> < b >< a href ="${item.link}" > ${item.title} </ a ></ b > <br> < span > ${item.description} </ span > <br> </ p > <br> < hr > <br> </ c:forEach > <br> <br> <% <br> } else {<br> %> Error!!!! <% <br> }<br> %> <br><br> * This source code was highlighted with Source Code Highlighter .
<%<br> PortletPreferences preferences = renderRequest.getPreferences();<br> if ( preferences!= null ) {<br> String frequency = ( String ) preferences.getValue(HabraRssPortlet.UPDATE_FREQUENCY, "60" );<br> String quantity = ( String ) preferences.getValue(HabraRssPortlet.ITEM_QUANTITY, "5" );<br> String [] links = ( String []) preferences.getValues(HabraRssPortlet.RSS_LINKS, null );<br>%> <br><br> * This source code was highlighted with Source Code Highlighter .
<%<br> PortletPreferences preferences = renderRequest.getPreferences();<br> if ( preferences!= null ) {<br> String frequency = ( String ) preferences.getValue(HabraRssPortlet.UPDATE_FREQUENCY, "60" );<br> String quantity = ( String ) preferences.getValue(HabraRssPortlet.ITEM_QUANTITY, "5" );<br> String [] links = ( String []) preferences.getValues(HabraRssPortlet.RSS_LINKS, null );<br>%> <br><br> * This source code was highlighted with Source Code Highlighter .
<%<br> PortletPreferences preferences = renderRequest.getPreferences();<br> if ( preferences!= null ) {<br> String frequency = ( String ) preferences.getValue(HabraRssPortlet.UPDATE_FREQUENCY, "60" );<br> String quantity = ( String ) preferences.getValue(HabraRssPortlet.ITEM_QUANTITY, "5" );<br> String [] links = ( String []) preferences.getValues(HabraRssPortlet.RSS_LINKS, null );<br>%> <br><br> * This source code was highlighted with Source Code Highlighter .
package ru.habrahabr.rssportlet;<br><br> public class RssUtil {<br><br> public static ArrayList updateRssFeeds(PortletPreferences preferences){<br> ArrayList allItems = new ArrayList ();<br> String [] links = preferences.getValues(HabraRssPortlet.RSS_LINKS, null );<br> int quantity = Integer.parseInt(preferences.getValue(HabraRssPortlet.ITEM_QUANTITY, "3" ));<br> for ( int i=0; i < links.length; i++){<br> String link = links[i];<br> InputStream stream = null ;<br> try {<br> URL s = new URL(link);<br> URLConnection connection = s.openConnection();<br> if (!(connection instanceof URLConnection)) { <br> throw new IllegalArgumentException(s.toExternalForm() + " is not a valid HTTP Url" );<br> }<br> stream = connection.getInputStream();<br> try {<br> RssParser parser = RssParserFactory.createDefault();<br> Rss rss = parser.parse(stream);<br> Collection items = rss.getChannel().getItems();<br> if (items != null && !items.isEmpty()) {<br> Iterator it = items.iterator();<br> int count = 0;<br> while (it.hasNext() && count < quantity){<br> Item item = (Item) it.next();<br> allItems.add(item);<br> count++;<br> }<br> }<br> } catch (RssParserException e) {<br> e.printStackTrace();<br> }<br> } catch (IOException e) {<br> e.printStackTrace();<br> }<br> }<br> return allItems;<br> }<br><br> public static boolean checkUpdateTime(Long lastUpdateTime, PortletPreferences preferences) {<br> int interval = Integer.parseInt(preferences.getValue(HabraRssPortlet.UPDATE_FREQUENCY, "60" ));<br> if (((System.currentTimeMillis() - lastUpdateTime.longValue()) / 1000) > (interval * 60))<br> return true ;<br> return false ;<br> }<br><br>}<br> <br> * This source code was highlighted with Source Code Highlighter .
package ru.habrahabr.rssportlet;<br><br> public class RssUtil {<br><br> public static ArrayList updateRssFeeds(PortletPreferences preferences){<br> ArrayList allItems = new ArrayList ();<br> String [] links = preferences.getValues(HabraRssPortlet.RSS_LINKS, null );<br> int quantity = Integer.parseInt(preferences.getValue(HabraRssPortlet.ITEM_QUANTITY, "3" ));<br> for ( int i=0; i < links.length; i++){<br> String link = links[i];<br> InputStream stream = null ;<br> try {<br> URL s = new URL(link);<br> URLConnection connection = s.openConnection();<br> if (!(connection instanceof URLConnection)) { <br> throw new IllegalArgumentException(s.toExternalForm() + " is not a valid HTTP Url" );<br> }<br> stream = connection.getInputStream();<br> try {<br> RssParser parser = RssParserFactory.createDefault();<br> Rss rss = parser.parse(stream);<br> Collection items = rss.getChannel().getItems();<br> if (items != null && !items.isEmpty()) {<br> Iterator it = items.iterator();<br> int count = 0;<br> while (it.hasNext() && count < quantity){<br> Item item = (Item) it.next();<br> allItems.add(item);<br> count++;<br> }<br> }<br> } catch (RssParserException e) {<br> e.printStackTrace();<br> }<br> } catch (IOException e) {<br> e.printStackTrace();<br> }<br> }<br> return allItems;<br> }<br><br> public static boolean checkUpdateTime(Long lastUpdateTime, PortletPreferences preferences) {<br> int interval = Integer.parseInt(preferences.getValue(HabraRssPortlet.UPDATE_FREQUENCY, "60" ));<br> if (((System.currentTimeMillis() - lastUpdateTime.longValue()) / 1000) > (interval * 60))<br> return true ;<br> return false ;<br> }<br><br>}<br> <br> * This source code was highlighted with Source Code Highlighter .
package ru.habrahabr.rssportlet;<br><br> public class RssUtil {<br><br> public static ArrayList updateRssFeeds(PortletPreferences preferences){<br> ArrayList allItems = new ArrayList ();<br> String [] links = preferences.getValues(HabraRssPortlet.RSS_LINKS, null );<br> int quantity = Integer.parseInt(preferences.getValue(HabraRssPortlet.ITEM_QUANTITY, "3" ));<br> for ( int i=0; i < links.length; i++){<br> String link = links[i];<br> InputStream stream = null ;<br> try {<br> URL s = new URL(link);<br> URLConnection connection = s.openConnection();<br> if (!(connection instanceof URLConnection)) { <br> throw new IllegalArgumentException(s.toExternalForm() + " is not a valid HTTP Url" );<br> }<br> stream = connection.getInputStream();<br> try {<br> RssParser parser = RssParserFactory.createDefault();<br> Rss rss = parser.parse(stream);<br> Collection items = rss.getChannel().getItems();<br> if (items != null && !items.isEmpty()) {<br> Iterator it = items.iterator();<br> int count = 0;<br> while (it.hasNext() && count < quantity){<br> Item item = (Item) it.next();<br> allItems.add(item);<br> count++;<br> }<br> }<br> } catch (RssParserException e) {<br> e.printStackTrace();<br> }<br> } catch (IOException e) {<br> e.printStackTrace();<br> }<br> }<br> return allItems;<br> }<br><br> public static boolean checkUpdateTime(Long lastUpdateTime, PortletPreferences preferences) {<br> int interval = Integer.parseInt(preferences.getValue(HabraRssPortlet.UPDATE_FREQUENCY, "60" ));<br> if (((System.currentTimeMillis() - lastUpdateTime.longValue()) / 1000) > (interval * 60))<br> return true ;<br> return false ;<br> }<br><br>}<br> <br> * This source code was highlighted with Source Code Highlighter .
Source: https://habr.com/ru/post/45927/
All Articles