Author: emuckenhuber
Date: 2007-11-16 10:13:46 -0500 (Fri, 16 Nov 2007)
New Revision: 8975
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/netvibes/NetvibesQueryResultTestCase.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/netvibes/NetvibesQueryTestCase.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NVEcosystemFactory.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NVQueryResultMetaData.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NetvibesWidgetApplicationType.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NetvibesWidgetCategory.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesDirectoryQueryMapEntry.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQuery.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResult.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResultBuilder.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResultEntry.java
branches/JBoss_Portal_Branch_2_6/widget/src/resources/test/netvibes/queryresult_1.xml
Modified:
branches/JBoss_Portal_Branch_2_6/widget/build.xml
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/google/Foo3TestCase.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/support/TestQuery.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/AbstractWidgetProvider.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/WidgetProvider.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/GGWidgetPortlet.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/provider/GGDirectoryQueryMapEntry.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/provider/GGProvider.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/NetvibesWidgetPortlet.java
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesProvider.java
branches/JBoss_Portal_Branch_2_6/widget/src/resources/portal-widget-netvibes-war/WEB-INF/jsp/edit_content.jsp
Log:
JBPORTAL-1534: NV directory lookup, still requires some cleanup
Modified: branches/JBoss_Portal_Branch_2_6/widget/build.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_6/widget/build.xml 2007-11-16 14:59:43 UTC (rev 8974)
+++ branches/JBoss_Portal_Branch_2_6/widget/build.xml 2007-11-16 15:13:46 UTC (rev 8975)
@@ -282,14 +282,14 @@
-->
<x-test>
- <!--
<test todir="${test.reports}"
name="org.jboss.portal.test.widget.google.Foo3TestCase"/>
- -->
<test todir="${test.reports}"
name="org.jboss.portal.test.widget.netvibes.NetvibesProviderTestCase"/>
<test todir="${test.reports}"
name="org.jboss.portal.test.widget.netvibes.NetvibesWidgetRenderTestCase"/>
<test todir="${test.reports}"
name="org.jboss.portal.test.widget.google.QueryResultParserTestCase"/>
<test todir="${test.reports}"
name="org.jboss.portal.test.widget.google.PreferencesTestCase"/>
<test todir="${test.reports}"
name="org.jboss.portal.test.widget.netvibes.JSONBuilderTestCase"/>
+ <test todir="${test.reports}"
name="org.jboss.portal.test.widget.netvibes.NetvibesQueryTestCase"/>
+ <test todir="${test.reports}"
name="org.jboss.portal.test.widget.netvibes.NetvibesQueryResultTestCase"/>
</x-test>
<x-classpath>
<!--
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/google/Foo3TestCase.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/google/Foo3TestCase.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/google/Foo3TestCase.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -43,7 +43,7 @@
public void test01() throws Exception
{
- AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractReturnFileServer(8080,
"google/queryresult1.xml")
+ AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractReturnFileServer(8181,
"google/queryresult1.xml")
{
protected void doClient() throws Exception
{
@@ -54,8 +54,9 @@
TestQuery q = new TestQuery();
List<DirectoryQueryResultEntry> w = provider.search(q);
-
+
provider.stop();
+ assertEquals(24, w.size());
}
};
@@ -65,7 +66,7 @@
public void test02() throws Exception
{
- AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractReturnFileServer(8080,
"google/queryresult2.xml")
+ AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractReturnFileServer(8181,
"google/queryresult2.xml")
{
protected void doClient() throws Exception
{
@@ -78,7 +79,7 @@
List<DirectoryQueryResultEntry> w = provider.search(q);
provider.stop();
-
+ assertEquals(24, w.size());
}
};
server.performInteraction();
@@ -86,7 +87,7 @@
public void test03_fail() throws Exception
{
- AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractReturnFileServer(8080,
"google/queryresult3_fail.xml")
+ AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractReturnFileServer(8181,
"google/queryresult3_fail.xml")
{
protected void doClient() throws Exception
{
@@ -99,6 +100,7 @@
List<DirectoryQueryResultEntry> w = provider.search(q);
provider.stop();
+ assertEquals(0, w.size());
}
};
@@ -108,7 +110,7 @@
public void test03_timeout() throws Exception
{
- AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractTimeoutServer(8080)
+ AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractTimeoutServer(8181)
{
protected void doClient() throws Exception
{
@@ -117,9 +119,8 @@
TestQuery q = new TestQuery();
List<DirectoryQueryResultEntry> w = provider.search(q);
+ provider.stop();
assertEquals(0, w.size());
-
- provider.stop();
}
};
server.performInteraction();
@@ -127,7 +128,7 @@
public void test404() throws Exception
{
- AbstractSynchronizedServer server = new
AbstractSynchronizedServer.Abstract404Server(8080)
+ AbstractSynchronizedServer server = new
AbstractSynchronizedServer.Abstract404Server(8181)
{
protected void doClient() throws Exception
{
@@ -136,9 +137,8 @@
TestQuery q = new TestQuery();
List<DirectoryQueryResultEntry> w = provider.search(q);
+ provider.stop();
assertEquals(0, w.size());
-
- provider.stop();
}
};
server.performInteraction();
@@ -147,16 +147,16 @@
public void test_widget404() throws Exception
{
- AbstractSynchronizedServer server = new
AbstractSynchronizedServer.Abstract404Server(8080)
+ AbstractSynchronizedServer server = new
AbstractSynchronizedServer.Abstract404Server(8181)
{
protected void doClient() throws Exception
{
WidgetProvider provider = new GGProvider();
provider.start();
- URL url = new URL("http://localhost:8080");
+ URL url = new URL("http://localhost:8181");
Widget w = provider.getWidget(url);
-
+
provider.stop();
assertNull(w);
@@ -167,14 +167,14 @@
public void test_widget_wrong_content() throws Exception
{
- AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractReturnFileServer(8080,
"google/gadget1_fail.xml")
+ AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractReturnFileServer(8181,
"google/gadget1_fail.xml")
{
protected void doClient() throws Exception
{
WidgetProvider provider = new GGProvider();
provider.start();
- URL url = new URL("http://localhost:8080");
+ URL url = new URL("http://localhost:8181");
Widget w = provider.getWidget(url);
provider.stop();
@@ -187,19 +187,19 @@
public void test_widget_timeout() throws Exception
{
- AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractTimeoutServer(8080)
+ AbstractSynchronizedServer server = new
AbstractSynchronizedServer.AbstractTimeoutServer(8181)
{
protected void doClient() throws Exception
{
WidgetProvider provider = new GGProvider();
provider.start();
- URL url = new URL("http://localhost:8080");
+ URL url = new URL("http://localhost:8181");
Widget w = provider.getWidget(url);
- assertNull(w);
+
provider.stop();
-
+ assertNull(w);
}
};
server.performInteraction();
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/netvibes/NetvibesQueryResultTestCase.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/netvibes/NetvibesQueryResultTestCase.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/netvibes/NetvibesQueryResultTestCase.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,101 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.test.widget.netvibes;
+
+import java.net.URL;
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.jboss.portal.widget.netvibes.provider.NetvibesQueryResult;
+import org.jboss.portal.widget.netvibes.provider.NetvibesQueryResultBuilder;
+import org.jboss.portal.widget.netvibes.provider.NetvibesQueryResultEntry;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesQueryResultTestCase extends TestCase
+{
+
+ public void test01()
+ {
+ URL url = this.getFileURL("netvibes/queryresult_1.xml");
+ assertNotNull(url);
+ NetvibesQueryResultBuilder builder = new NetvibesQueryResultBuilder(url);
+ NetvibesQueryResult result = builder.build(5000);
+ assertNotNull(result);
+ assertEquals(10, result.collection().size());
+ Iterator i = result.entries();
+ NetvibesQueryResultEntry entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+ assertEquals("The Jerusalem Post", entry.getTitle());
+ assertEquals("Latest news from The Jerusalem Post, the world's top
English-language daily newspaper covering Israel, the Middle East and the Jewish
World.", entry.getDescription());
+
assertEquals("http://www.netvibes.com/modules/multipleFeeds/multiple...;,
entry.getURL().toString());
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+ assertEquals("WMLScript reference", entry.getTitle());
+ assertEquals("Search through WMLScript help, reference, tutorials and
examples.", entry.getDescription());
+
assertEquals("http://freebestoffer.com/downloads/wmlscript.html",
entry.getURL().toString());
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+ assertEquals("Web developer's help", entry.getTitle());
+ assertEquals("Search and browse help, tutorials, examples and reference
documents on XML, XSLT, HTML, JavaScript, VBScript, Flash, SQL and more.",
entry.getDescription());
+
assertEquals("http://freebestoffer.com/downloads/webdevel.html",
entry.getURL().toString());
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+ assertEquals("VBScript reference", entry.getTitle());
+ assertEquals("Search through Visual Basic script help, reference, tutorials
and examples.", entry.getDescription());
+
assertEquals("http://freebestoffer.com/downloads/vbscript.html",
entry.getURL().toString());
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+ assertEquals("SVG reference", entry.getTitle());
+ assertEquals("Search through SVG help, reference, tutorials and
examples.", entry.getDescription());
+
assertEquals("http://freebestoffer.com/downloads/svg.html",
entry.getURL().toString());
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+ assertEquals("SQL reference", entry.getTitle());
+ assertEquals("Search through SQL help, reference, tutorials and
examples.", entry.getDescription());
+
assertEquals("http://freebestoffer.com/downloads/sql.html",
entry.getURL().toString());
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+
+ entry = (NetvibesQueryResultEntry) i.next();
+ assertNotNull(entry);
+
+ assertFalse(i.hasNext());
+ }
+
+ private URL getFileURL(String filename)
+ {
+ return Thread.currentThread().getContextClassLoader().getResource(filename);
+ }
+
+}
+
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/netvibes/NetvibesQueryTestCase.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/netvibes/NetvibesQueryTestCase.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/netvibes/NetvibesQueryTestCase.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,57 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.test.widget.netvibes;
+
+import org.jboss.portal.widget.netvibes.provider.NetvibesQuery;
+
+import junit.framework.TestCase;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesQueryTestCase extends TestCase
+{
+
+ public void test01() throws Exception
+ {
+ NetvibesQuery q = new NetvibesQuery(0, 10, "14", "all",
"foo");
+
assertEquals("http://eco.netvibes.com/rss.php?synd=jboss&count=1...;,
q.buildQueryURL().toString());
+ }
+
+
+ public void test02() throws Exception
+ {
+ NetvibesQuery q = new NetvibesQuery(1, 11, "5", "foo",
"bar");
+
assertEquals("http://eco.netvibes.com/rss.php?synd=jboss&start=1...;,
q.buildQueryURL().toString());
+ }
+
+ public void test03()
+ {
+ NetvibesQuery q1 = new NetvibesQuery(0, 10, "14", "all",
"foo");
+ NetvibesQuery q2 = new NetvibesQuery(0, 10, "14", "all",
"foo");
+ assertTrue(q1.equals(q2));
+ }
+
+}
+
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/support/TestQuery.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/support/TestQuery.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/test/widget/support/TestQuery.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -36,7 +36,7 @@
public URL buildQueryURL() throws MalformedURLException
{
- return new URL("http://localhost:8080");
+ return new URL("http://localhost:8181");
}
}
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/AbstractWidgetProvider.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/AbstractWidgetProvider.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/AbstractWidgetProvider.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -65,7 +65,7 @@
private boolean fetchWidgetsOnDirectoryLookup = false;
/** The connection timeout */
- protected long connectionTimeout = 5000;
+ protected int connectionTimeout = 5000;
/** Eviction thread timing */
protected long timing = TimeUnit.MILLISECONDS.convert(60, TimeUnit.SECONDS);
@@ -92,7 +92,7 @@
return connectionTimeout;
}
- public void setConnectionTimeout(long connectionTimeout)
+ public void setConnectionTimeout(int connectionTimeout)
{
this.connectionTimeout = connectionTimeout;
}
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/WidgetProvider.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/WidgetProvider.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/WidgetProvider.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -43,7 +43,7 @@
public List<DirectoryQueryResultEntry> search(WidgetQuery query);
- public void setConnectionTimeout(long connectionTimeout);
+ public void setConnectionTimeout(int connectionTimeout);
public void setQueryExpiration(long millis);
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/GGWidgetPortlet.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/GGWidgetPortlet.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/GGWidgetPortlet.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -100,6 +100,12 @@
params.put("currentPage", new String[]{currentPage});
}
+ String numberOfResults = req.getParameter("numberOfResults");
+ if (numberOfResults != null)
+ {
+ params.put("numberOfResults", new String[]{numberOfResults});
+ }
+
//
String queryParam = req.getParameter("query");
if (queryParam != null)
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/provider/GGDirectoryQueryMapEntry.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/provider/GGDirectoryQueryMapEntry.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/provider/GGDirectoryQueryMapEntry.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -36,14 +36,18 @@
/** The widget URL */
private final WidgetQuery query;
- public GGDirectoryQueryMapEntry(WidgetQuery query)
+ /** The connection timeout */
+ private final int connectionTimeout;
+
+ public GGDirectoryQueryMapEntry(WidgetQuery query, int connectionTimeout)
{
this.query = query;
+ this.connectionTimeout = connectionTimeout;
}
public DirectoryQueryResult call() throws Exception
{
- return new GGQueryResultBuilder(query).build(5000); // todo
+ return new GGQueryResultBuilder(query).build(connectionTimeout);
}
}
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/provider/GGProvider.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/provider/GGProvider.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/google/provider/GGProvider.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -58,7 +58,7 @@
@Override
protected final void addDirectoryResult(WidgetQuery query)
{
- ExpiringFutureTask<DirectoryQueryResult> dt = new
ExpiringFutureTask<DirectoryQueryResult>(queryExpiration, new
GGDirectoryQueryMapEntry(query));
+ ExpiringFutureTask<DirectoryQueryResult> dt = new
ExpiringFutureTask<DirectoryQueryResult>(queryExpiration, new
GGDirectoryQueryMapEntry(query, (int) connectionTimeout));
ExpiringFutureTask<DirectoryQueryResult> e = queries.putIfAbsent(query, dt);
if (e == null)
{
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/NetvibesWidgetPortlet.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/NetvibesWidgetPortlet.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/NetvibesWidgetPortlet.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -90,7 +90,26 @@
{
params.put("cat", new String[]{catParam});
}
+
+ String typeParam = req.getParameter("type");
+ if (catParam != null)
+ {
+ params.put("type", new String[]{typeParam});
+ }
+ String currentPage = req.getParameter("currentPage");
+ if (currentPage != null)
+ {
+ params.put("currentPage", new String[]{currentPage});
+ }
+
+
+ String numberOfResults = req.getParameter("numberOfResults");
+ if (numberOfResults != null)
+ {
+ params.put("numberOfResults", new String[]{numberOfResults});
+ }
+
//
String queryParam = req.getParameter("query");
if (queryParam != null)
@@ -98,10 +117,10 @@
params.put("query", new String[]{queryParam});
}
- String pickMethod = req.getParameter("gg_pick_method");
+ String pickMethod = req.getParameter("nv_pick_method");
if (pickMethod != null)
{
- params.put("gg_pick_method", new String[]{pickMethod});
+ params.put("nv_pick_method", new String[]{pickMethod});
}
//
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NVEcosystemFactory.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NVEcosystemFactory.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NVEcosystemFactory.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,100 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.directory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.xb.binding.GenericObjectModelFactory;
+import org.jboss.xb.binding.UnmarshallingContext;
+import org.xml.sax.Attributes;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NVEcosystemFactory implements GenericObjectModelFactory
+{
+
+ public void addChild(Object parent, Object child, UnmarshallingContext
unmarshallingContext, String namespaceURI, String localname)
+ {
+ if(child instanceof NVQueryResultMetaData)
+ {
+ ((List)parent).add(child);
+ }
+ }
+
+ public Object newChild(Object parent, UnmarshallingContext unmarshallingContext,
String namespaceURI, String localName, Attributes attributes)
+ {
+ if("channel".equals(localName))
+ {
+ return parent;
+ }
+ if("item".equals(localName))
+ {
+ return new NVQueryResultMetaData();
+ }
+ return null;
+ }
+
+ public void setValue(Object object, UnmarshallingContext unmarshallingContext, String
namespaceURI, String localName, String value)
+ {
+ if(object instanceof NVQueryResultMetaData)
+ {
+ NVQueryResultMetaData meta = (NVQueryResultMetaData) object;
+ if ("title".equals(localName))
+ {
+ meta.setTitle(value);
+ }
+ else if ("description".equals(localName))
+ {
+ meta.setDescription(value);
+ }
+ else if ("link".equals(localName))
+ {
+ meta.setLink(value);
+ }
+ else if ("guid".equals(localName))
+ {
+ meta.setGuid(value);
+ }
+ else if ("pubDate".equals(localName))
+ {
+ meta.setPubDate(value);
+ }
+ }
+
+ }
+
+ public Object completeRoot(Object root, UnmarshallingContext unmarshallingContext,
String namespaceURI, String localname)
+ {
+ return root;
+ }
+
+ public Object newRoot(Object root, UnmarshallingContext unmarshallingContext, String
namespaceURI, String localname, Attributes attributes)
+ {
+ return new ArrayList();
+ }
+
+}
+
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NVQueryResultMetaData.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NVQueryResultMetaData.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NVQueryResultMetaData.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,97 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.directory;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NVQueryResultMetaData
+{
+
+ /** . */
+ private String title;
+
+ /** . */
+ private String description;
+
+ /** . */
+ private String link;
+
+ /** . */
+ private String guid;
+
+ /** . */
+ private String pubDate;
+
+ public String getTitle()
+ {
+ return title;
+ }
+
+ public void setTitle(String title)
+ {
+ this.title = title;
+ }
+
+ public String getDescription()
+ {
+ return description;
+ }
+
+ public void setDescription(String description)
+ {
+ this.description = description;
+ }
+
+ public String getLink()
+ {
+ return link;
+ }
+
+ public void setLink(String link)
+ {
+ this.link = link;
+ }
+
+ public String getGuid()
+ {
+ return guid;
+ }
+
+ public void setGuid(String guid)
+ {
+ this.guid = guid;
+ }
+
+ public String getPubDate()
+ {
+ return pubDate;
+ }
+
+ public void setPubDate(String pubDate)
+ {
+ this.pubDate = pubDate;
+ }
+}
+
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NetvibesWidgetApplicationType.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NetvibesWidgetApplicationType.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NetvibesWidgetApplicationType.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,54 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.directory;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesWidgetApplicationType
+{
+
+ private String id;
+
+ private String description;
+
+ public NetvibesWidgetApplicationType(String id, String description)
+ {
+ this.id = id;
+ this.description = description;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public String getDescription()
+ {
+ return description;
+ }
+
+
+}
+
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NetvibesWidgetCategory.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NetvibesWidgetCategory.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/directory/NetvibesWidgetCategory.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,53 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.directory;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesWidgetCategory
+{
+
+ private String id;
+
+ private String description;
+
+ public NetvibesWidgetCategory(String id, String description)
+ {
+ this.id = id;
+ this.description = description;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public String getDescription()
+ {
+ return description;
+ }
+
+}
+
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesDirectoryQueryMapEntry.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesDirectoryQueryMapEntry.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesDirectoryQueryMapEntry.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,55 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.provider;
+
+import java.util.concurrent.Callable;
+
+import org.jboss.portal.widget.DirectoryQueryResult;
+import org.jboss.portal.widget.WidgetQuery;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesDirectoryQueryMapEntry implements
Callable<DirectoryQueryResult>
+{
+
+ /** The widget URL */
+ private final WidgetQuery query;
+
+ /** The connection timeout */
+ private final int connectionTimeout;
+
+ public NetvibesDirectoryQueryMapEntry(WidgetQuery query, int connectionTimeout)
+ {
+ this.query = query;
+ this.connectionTimeout = connectionTimeout;
+ }
+
+ public DirectoryQueryResult call() throws Exception
+ {
+ return new NetvibesQueryResultBuilder(query).build(connectionTimeout);
+ }
+
+}
+
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesProvider.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesProvider.java 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesProvider.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -23,11 +23,18 @@
package org.jboss.portal.widget.netvibes.provider;
import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import org.jboss.portal.common.util.CollectionBuilder;
import org.jboss.portal.widget.AbstractWidgetProvider;
+import org.jboss.portal.widget.DirectoryQueryResult;
import org.jboss.portal.widget.ExpiringFutureTask;
import org.jboss.portal.widget.Widget;
import org.jboss.portal.widget.WidgetQuery;
+import org.jboss.portal.widget.netvibes.directory.NetvibesWidgetApplicationType;
+import org.jboss.portal.widget.netvibes.directory.NetvibesWidgetCategory;
/**
* @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
@@ -37,10 +44,52 @@
public class NetvibesProvider extends AbstractWidgetProvider
{
+ /** The netvibes categories */
+ private static final Collection CATEGORIES =
Collections.unmodifiableList((List)CollectionBuilder.arrayList()
+ .add(new NetvibesWidgetCategory("0", "All"))
+ .add(new NetvibesWidgetCategory("4", "News"))
+ .add(new NetvibesWidgetCategory("5", "Tools &
Reference"))
+ .add(new NetvibesWidgetCategory("6", "Communication"))
+ .add(new NetvibesWidgetCategory("7", "Arts &
Entertainment"))
+ .add(new NetvibesWidgetCategory("8", "Fun & Games"))
+ .add(new NetvibesWidgetCategory("9", "Shopping"))
+ .add(new NetvibesWidgetCategory("10", "Sports"))
+ .add(new NetvibesWidgetCategory("11", "Travels"))
+ .add(new NetvibesWidgetCategory("12", "Business"))
+ .add(new NetvibesWidgetCategory("13", "Lifestyle"))
+ .add(new NetvibesWidgetCategory("14", "Technology"))
+ .add(new NetvibesWidgetCategory("15", "Sciences"))
+ .get());
+
+ /** The netvibes application types */
+ private static final Collection TYPES =
Collections.unmodifiableList((List)CollectionBuilder.arrayList()
+ .add(new NetvibesWidgetApplicationType("all", "All"))
+ .add(new NetvibesWidgetApplicationType("application",
"Application"))
+ .add(new NetvibesWidgetApplicationType("feed", "Feed"))
+ .add(new NetvibesWidgetApplicationType("podcast",
"Podcast"))
+ .add(new NetvibesWidgetApplicationType("event", "Event"))
+ .get());
+
+ public Collection getCategories()
+ {
+ return CATEGORIES;
+ }
+
+ public Collection getApplicationTypes()
+ {
+ return TYPES;
+ }
+
@Override
protected void addDirectoryResult(WidgetQuery query)
{
- throw new IllegalArgumentException("Not yet implemented");
+ ExpiringFutureTask<DirectoryQueryResult> dt = new
ExpiringFutureTask<DirectoryQueryResult>(queryExpiration, new
NetvibesDirectoryQueryMapEntry(query, connectionTimeout));
+ ExpiringFutureTask<DirectoryQueryResult> e = queries.putIfAbsent(query, dt);
+ if (e == null)
+ {
+ e = dt;
+ executor.submit(e);
+ }
}
@Override
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQuery.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQuery.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQuery.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,156 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.provider;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Locale;
+
+import org.jboss.portal.widget.WidgetQuery;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesQuery implements WidgetQuery
+{
+
+ /** . */
+ private static final org.jboss.logging.Logger log =
org.jboss.logging.Logger.getLogger(NetvibesQuery.class);
+
+ /** . */
+ private int start;
+
+ /** Zero or negative means it is not used. */
+ private int count = 10;
+
+ /** . */
+ private String cat;
+
+ /** . */
+ private String type;
+
+ /** . */
+ private String q;
+
+ /** . */
+ private Locale locale;
+
+ /** . */
+ private int hashCode;
+
+ public NetvibesQuery(int start, int num, String cat, String type, String q)
+ {
+ if (start < 0)
+ {
+ throw new IllegalArgumentException("No negative start");
+ }
+ if (cat != null && cat.length() == 0)
+ {
+ cat = null;
+ }
+ if (q != null && q.length() == 0)
+ {
+ q = null;
+ }
+
+ //
+ this.start = start;
+ this.count = num;
+ this.cat = cat;
+ this.q = q;
+ this.type = type;
+ this.hashCode = start + num + (cat == null ? 0 : 1 + cat.hashCode()) + (q == null ?
0 : 1 + q.hashCode()) + (type == null ? 0 : 1 + type.hashCode());
+ }
+
+ public int getStart()
+ {
+ return start;
+ }
+
+ public int getNum()
+ {
+ return count;
+ }
+
+ public String getCat()
+ {
+ return cat;
+ }
+
+ public String getQ()
+ {
+ return q;
+ }
+
+ public boolean equals(Object obj)
+ {
+ if( obj == this)
+ {
+ return true;
+ }
+ if(obj instanceof NetvibesQuery)
+ {
+ NetvibesQuery that = (NetvibesQuery) obj;
+ return
+ (this.start == that.start) &&
+ (this.count == that.count) &&
+ (this.cat == null ? that.cat == null : this.cat.equals(that.cat)) &&
+ (this.q == null ? that.q == null : this.q.equals(that.q));
+ }
+ return false;
+ }
+
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ public URL buildQueryURL() throws MalformedURLException
+ {
+ StringBuffer buffer = new
StringBuffer("http://eco.netvibes.com/rss.php?synd=jboss");
+ if( start > 0 )
+ {
+ buffer.append("&start=").append(start);
+ }
+ if (count > 0)
+ {
+ buffer.append("&count=").append(count);
+ }
+ if (cat != null)
+ {
+ buffer.append("&cat=").append(cat);
+ }
+ if (type != null)
+ {
+ buffer.append("&type=").append(type);
+ }
+ if (q != null)
+ {
+ buffer.append("&q=").append(q);
+ }
+ return new URL(buffer.toString());
+ }
+
+}
+
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResult.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResult.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResult.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,66 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.provider;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.jboss.portal.widget.DirectoryQueryResult;
+import org.jboss.portal.widget.DirectoryQueryResultEntry;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesQueryResult implements DirectoryQueryResult
+{
+ private final List<NetvibesQueryResultEntry> entries;
+
+ public NetvibesQueryResult(List entries)
+ {
+ if (entries == null)
+ {
+ throw new IllegalArgumentException();
+ }
+ this.entries = entries;
+ }
+
+ public List<URL> collection()
+ {
+ List<URL> list = new ArrayList<URL>();
+ for(NetvibesQueryResultEntry entry : entries)
+ {
+ list.add(entry.getURL());
+ }
+ return list;
+ }
+
+ public Iterator<? extends DirectoryQueryResultEntry> entries()
+ {
+ return entries.iterator();
+ }
+
+}
+
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResultBuilder.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResultBuilder.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResultBuilder.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,139 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.provider;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.jboss.portal.common.io.IOTools;
+import org.jboss.portal.common.net.URLTools;
+import org.jboss.portal.widget.WidgetQuery;
+import org.jboss.portal.widget.netvibes.directory.NVEcosystemFactory;
+import org.jboss.portal.widget.netvibes.directory.NVQueryResultMetaData;
+import org.jboss.xb.binding.ObjectModelFactory;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesQueryResultBuilder
+{
+
+ private static final org.jboss.logging.Logger log =
org.jboss.logging.Logger.getLogger(NetvibesQueryResultBuilder.class);
+
+ /** . */
+ private final URL url;
+
+
+ public NetvibesQueryResultBuilder(WidgetQuery query) throws MalformedURLException
+ {
+ if (query == null)
+ {
+
+ }
+ this.url = query.buildQueryURL();
+ }
+
+ public NetvibesQueryResultBuilder(URL url)
+ {
+ if (url == null)
+ {
+
+ }
+ this.url = url;
+ }
+
+ public NetvibesQueryResult build(int connectionTimeout)
+ {
+ try
+ {
+ // Read fully the URL content first
+ long millis = System.currentTimeMillis();
+ byte[] bytes;
+ if ("http".equals(url.getProtocol()))
+ {
+ bytes = URLTools.getContent(url, connectionTimeout, connectionTimeout);
+ }
+ else
+ {
+
+ InputStream in = url.openStream();
+ try
+ {
+ bytes = IOTools.getBytes(in);
+ }
+ finally
+ {
+ IOTools.safeClose(in);
+ }
+ }
+
+ //
+ if (bytes == null)
+ {
+ throw new Exception("Cannot retrieve " + url);
+ }
+
+ String string = new String(bytes);
+
+ List data = null;
+
+ Unmarshaller unmarshaller =
UnmarshallerFactory.newInstance().newUnmarshaller();
+
+ // create an instance of ObjectModelFactory
+ ObjectModelFactory factory = new NVEcosystemFactory();
+
+ // let the object model factory to create an instance of List and populate it
with data from XML
+ data = (List)unmarshaller.unmarshal(new
ByteArrayInputStream(string.getBytes("UTF-8")), factory, null);
+ List entries = new ArrayList();
+
+ for (Iterator iterator = data.iterator(); iterator.hasNext();)
+ {
+ NVQueryResultMetaData meta = (NVQueryResultMetaData) iterator.next();
+ NetvibesQueryResultEntry entry = new NetvibesQueryResultEntry(meta);
+ entries.add(entry);
+ }
+ return new NetvibesQueryResult(entries);
+ }
+ catch (SocketTimeoutException e)
+ {
+ log.error("Query for netvibs widget in directory failed due to timeout. Try
to increase connectionTimeout initial parameter; ", e);
+ }
+ catch(Exception e)
+ {
+ log.error("Netvibes widget query failed: ", e);
+ }
+ return new NetvibesQueryResult(Collections.EMPTY_LIST);
+ }
+
+}
+
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResultEntry.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResultEntry.java
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/main/org/jboss/portal/widget/netvibes/provider/NetvibesQueryResultEntry.java 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,70 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.widget.netvibes.provider;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.jboss.portal.widget.DirectoryQueryResultEntry;
+import org.jboss.portal.widget.netvibes.directory.NVQueryResultMetaData;
+
+/**
+ * @author <a href="mailto:emuckenh@redhat.com">Emanuel
Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NetvibesQueryResultEntry implements DirectoryQueryResultEntry
+{
+
+ /** . */
+ private String title;
+
+ /** . */
+ private String description;
+
+ /** . */
+ private URL url;
+
+ public NetvibesQueryResultEntry(NVQueryResultMetaData meta) throws
MalformedURLException
+ {
+ this.title = meta.getTitle();
+ this.description = meta.getDescription();
+ this.url = new URL(meta.getLink());
+ }
+
+ public String getDescription()
+ {
+ return this.description;
+ }
+
+ public String getTitle()
+ {
+ return this.title;
+ }
+
+ public URL getURL()
+ {
+ return this.url;
+ }
+
+}
+
Modified:
branches/JBoss_Portal_Branch_2_6/widget/src/resources/portal-widget-netvibes-war/WEB-INF/jsp/edit_content.jsp
===================================================================
---
branches/JBoss_Portal_Branch_2_6/widget/src/resources/portal-widget-netvibes-war/WEB-INF/jsp/edit_content.jsp 2007-11-16
14:59:43 UTC (rev 8974)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/resources/portal-widget-netvibes-war/WEB-INF/jsp/edit_content.jsp 2007-11-16
15:13:46 UTC (rev 8975)
@@ -1,14 +1,20 @@
+<%@page
import="org.jboss.portal.widget.netvibes.directory.NetvibesWidgetCategory"%>
+<%@page
import="org.jboss.portal.widget.netvibes.directory.NetvibesWidgetApplicationType"%>
<%@page
import="org.jboss.portal.widget.netvibes.provider.NetvibesProvider"%>
<%@page
import="org.jboss.portal.widget.netvibes.NetvibesPreferenceInfo"%>
+<%@page
import="org.jboss.portal.widget.netvibes.provider.NetvibesQuery"%>
+<%@page import="org.jboss.portal.common.util.IteratorStatus"%>
+<%@page import="org.jboss.portal.widget.DirectoryQueryResultEntry"%>
<%@page import="org.jboss.portal.widget.netvibes.NetvibesWidget"%>
<%@page import="org.jboss.portal.widget.netvibes.type.NVDataType"%>
<%@page import="org.jboss.portal.widget.netvibes.type.NVRangeType"%>
+<%@page import="org.jboss.portal.widget.netvibes.type.NVListType"%>
<%@page import="javax.portlet.PortletURL"%>
+<%@page import="java.util.List"%>
<%@page import="java.util.Iterator"%>
<%@ page language="java" %>
<%@ taglib
uri="http://java.sun.com/portlet" prefix="p" %>
<%@ page isELIgnored="false" %>
-<%@page import="org.jboss.portal.widget.netvibes.type.NVListType"%>
<p:defineObjects/>
<div>
<%
@@ -21,15 +27,72 @@
selWidget = (NetvibesWidget) provider.getWidget(uri);
}
- // no directory lookup available
- boolean uriPickMethod = true;
+ // Number of results to display
+ int numberOfResults = 10;
+ String resultSize= request.getParameter("numberOfResults");
+ if (resultSize != null && !resultSize.equals(""))
+ {
+ numberOfResults = Integer.parseInt(resultSize);
+ }
+
+ // Pagination
+ int currentPage = 0;
+ String tempPage = request.getParameter("currentPage");
+ if ( tempPage != null && !tempPage.equals(""))
+ {
+ int temp = Integer.parseInt(tempPage);
+ currentPage = temp < 0 ? 0 : temp;
+ }
+
+ // Get query term
+ String queryTerm = request.getParameter("query");
+ if (queryTerm == null)
+ {
+ queryTerm = "";
+ }
+
+ String type = request.getParameter("type");
+ if (type == null)
+ {
+ type = "all";
+ }
+
+ // Get category term
+ String catTerm = request.getParameter("cat");
+ if (catTerm == null)
+ {
+ catTerm = "0"; // all
+ }
+
+ // Compute query
+ int queryStart = currentPage * numberOfResults;
+ NetvibesQuery query = new NetvibesQuery(queryStart, numberOfResults + 1, catTerm,
type, queryTerm);
+ List queryResults = provider.search(query);
+
+ boolean uriPickMethod = false;
+ String nvPickMethod = request.getParameter("nv_pick_method");
+ if (nvPickMethod != null && nvPickMethod.equals("uri"))
+ {
+ uriPickMethod = true;
+ }
%>
+<div id="<p:namespace/>selection">
+ <input type="RADIO" name="nv_pick_method"
value="directory" <%= !uriPickMethod ? "CHECKED" : ""
%>
+
onclick="document.getElementById('<p:namespace/>directory_search_div').style.display
= 'block';
document.getElementById('<p:namespace/>gadget_url_div').style.display =
'none'; ">
+ Widget Directory
+ <input type="RADIO" name="nv_pick_method" value="uri"
<%= uriPickMethod ? "CHECKED" : "" %>
+
onclick="document.getElementById('<p:namespace/>directory_search_div').style.display
= 'none';
document.getElementById('<p:namespace/>gadget_url_div').style.display =
'block'; ">
+ Widget URI
+ <br>
+ <hr>
+</div>
+
<div id="<p:namespace/>gadget_url_div" style="display: <%=
uriPickMethod ? "block" : "none" %>;">
<%
PortletURL contentURL = renderResponse.createActionURL();
contentURL.setParameter("content.action.select",
"content.action.select");
- contentURL.setParameter("gg_pick_method", "uri");
+ contentURL.setParameter("nv_pick_method", "uri");
%>
<form action="<%= contentURL %>" method="post">
<%
@@ -57,6 +120,135 @@
<input type="submit" value="Select Widget"
class="portlet-form-button"/>
</form>
</div>
+<div id="<p:namespace/>directory_search_div" style="display:
<%= !uriPickMethod ? "block" : "none" %>;">
+
+ <form action="<p:renderURL></p:renderURL>"
method="post">
+ <input type="text" name="query" value="<%= queryTerm
%>" class="portlet-form-field"/>
+ <select name="cat" class="portlet-form-field">
+ <%
+ // Category dropdown
+ for (Iterator i = provider.getCategories().iterator();
i.hasNext();)
+ {
+ NetvibesWidgetCategory cat =
(NetvibesWidgetCategory)i.next();
+ boolean selected = cat.getId().equals(catTerm);
+ %>
+ <option value="<%= cat.getId() %>" <%= selected ?
"selected=\"selected\"" : ""
%>><%=cat.getDescription()%>
+ </option>
+ <%
+ }
+ %>
+ </select>
+ <select name="type" class="portlet-form-field">
+ <%
+ // Category dropdown
+ for (Iterator i = provider.getApplicationTypes().iterator();
i.hasNext();)
+ {
+ NetvibesWidgetApplicationType appType =
(NetvibesWidgetApplicationType)i.next();
+ boolean selected = appType.getId().equals(type);
+ %>
+ <option value="<%= appType.getId() %>" <%= selected ?
"selected=\"selected\"" : ""
%>><%=appType.getDescription()%>
+ </option>
+ <%
+ }
+ %>
+ </select>
+ <select name="numberOfResults"
class="portlet-form-field">
+ <%
+ // Number of results dropdown
+ for(int i = 5; i <= 25; i = i + 5)
+ {
+ boolean selected = i == numberOfResults;
+ %><option value="<%= i %>" <%= selected ?
"selected=\"selected\"" : "" %>><%= i
%></option><%
+ }
+ %>
+ </select>
+ <br/>
+ <input type="submit" value="Search Widgets"
class="portlet-form-button"/>
+ </form>
+
+ <p>
+ <table style="width:100%; border: 1px solid;" cellspacing="0"
cellpadding="0">
+ <%
+ for (IteratorStatus i = new IteratorStatus(queryResults.iterator());
i.hasNext();)
+ {
+ if ( (i.getIndex() + 1) >= numberOfResults)
+ {
+ break;
+ }
+
+ DirectoryQueryResultEntry result = (DirectoryQueryResultEntry) i.next();
+ boolean selected = selWidget != null &&
selWidget.getId().equals(result.getURL().toString());
+ PortletURL selectURL = renderResponse.createActionURL();
+
+ // Set parameters for selection
+ selectURL.setParameter("content.action.select",
"content.action.select");
+ selectURL.setParameter("content.uri",
result.getURL().toString());
+
+ // Set default parametrization state
+
+ // Propagage search nav state
+ selectURL.setParameter("cat", catTerm);
+ selectURL.setParameter("query", queryTerm);
+ selectURL.setParameter("type", type);
+ selectURL.setParameter("currentPage",
String.valueOf(currentPage));
+ selectURL.setParameter("numberOfResults",
String.valueOf(numberOfResults));
+
+ //
+ String rowClass = selected ? "portlet-section-selected" :
(i.getIndex() % 2 == 0 ? "portlet-section-body" :
"portlet-section-alternate");
+ %>
+ <tr class="<%= rowClass %>">
+ <td><a
+ href="<%= selectURL %>"><%= result.getTitle() %>
+ </a></td>
+ </tr>
+ <%
+ }
+ %>
+ </table>
+ <table style="width:100%; border: none;" cellspacing="0"
cellpadding="0">
+ <tr>
+ <td style="test-align: left;">
+ <% // previous page
+ if ( currentPage > 0 )
+ {
+ PortletURL prevURL = renderResponse.createRenderURL();
+ prevURL.setParameter("cat", catTerm);
+ prevURL.setParameter("query", queryTerm);
+ prevURL.setParameter("type", type);
+ prevURL.setParameter("numberOfResults",
String.valueOf(numberOfResults));
+
+ String prevPage = String.valueOf(currentPage - 1);
+
+ prevURL.setParameter("currentPage", prevPage);
+ %><a href="<%=prevURL %>">previous page</a><%
+ }
+ %>
+ </td>
+ <td style="text-align: right;">
+ <% // next page
+ if ( queryResults.size() > numberOfResults )
+ {
+ PortletURL nextURL = renderResponse.createRenderURL();
+ nextURL.setParameter("cat", catTerm);
+ nextURL.setParameter("query", queryTerm);
+ nextURL.setParameter("type", type);
+ nextURL.setParameter("numberOfResults",
String.valueOf(numberOfResults));
+
+ String nextPage = String.valueOf(currentPage + 1);
+
+ nextURL.setParameter("currentPage", nextPage);
+ %><a href="<%= nextURL %>">next page</a><%
+ }
+ %>
+ </td>
+ </tr>
+ </table>
+ </p>
+
+</div>
+
+
+
<%
if (selWidget != null &&
!selWidget.getWidgetInfo().getPreferencesInfo().getPreferences().isEmpty())
{
Added:
branches/JBoss_Portal_Branch_2_6/widget/src/resources/test/netvibes/queryresult_1.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_6/widget/src/resources/test/netvibes/queryresult_1.xml
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/widget/src/resources/test/netvibes/queryresult_1.xml 2007-11-16
15:13:46 UTC (rev 8975)
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss
xmlns:content="http://purl.org/rss/1.0/modules/content/"
version="2.0">
+ <channel>
+ <title><![CDATA[Netvibes ecosystem latest modules]]></title>
+ <link>http://eco.netvibes.com</link>
+ <description><![CDATA[Netvibes ecosystem latest
modules]]></description>
+ <pubDate>Fri, 16 Nov 2007 12:44:27 +0000</pubDate>
+ <generator>Netvibes Ecosystem</generator>
+
+ <
docs>http://blogs.law.harvard.edu/tech/rss</docs>
+ <item>
+ <title><![CDATA[The Jerusalem Post]]></title>
+
<
link>http://www.netvibes.com/modules/multipleFeeds/multipleFeeds.php?p...
+ <
guid>http://eco.netvibes.com/6/206552</guid>
+ <description><![CDATA[Latest news from The Jerusalem Post, the world's
top English-language daily newspaper covering Israel, the Middle East and the Jewish
World.]]></description>
+ <pubDate>Thu, 15 Nov 2007 08:57:46 +0000</pubDate>
+
+ <enclosure
url="http://eco.netvibes.com/thumb/206552"
type="image/jpeg" length=""/>
+ </item>
+ <item>
+ <title><![CDATA[WMLScript reference]]></title>
+ <
link>http://freebestoffer.com/downloads/wmlscript.html</link>
+ <
guid>http://eco.netvibes.com/6/206470</guid>
+ <description><![CDATA[Search through WMLScript help, reference, tutorials
and examples.]]></description>
+
+ <pubDate>Tue, 13 Nov 2007 16:13:34 +0000</pubDate>
+ <enclosure
url="http://eco.netvibes.com/thumb/206470"
type="image/jpeg" length=""/>
+ </item>
+ <item>
+ <title><![CDATA[Web developer's help]]></title>
+ <
link>http://freebestoffer.com/downloads/webdevel.html</link>
+ <
guid>http://eco.netvibes.com/6/206469</guid>
+
+ <description><![CDATA[Search and browse help, tutorials, examples and
reference documents on XML, XSLT, HTML, JavaScript, VBScript, Flash, SQL and
more.]]></description>
+ <pubDate>Tue, 13 Nov 2007 16:13:36 +0000</pubDate>
+ <enclosure
url="http://eco.netvibes.com/thumb/206469"
type="image/jpeg" length=""/>
+ </item>
+ <item>
+ <title><![CDATA[VBScript reference]]></title>
+ <
link>http://freebestoffer.com/downloads/vbscript.html</link>
+
+ <
guid>http://eco.netvibes.com/6/206468</guid>
+ <description><![CDATA[Search through Visual Basic script help, reference,
tutorials and examples.]]></description>
+ <pubDate>Tue, 13 Nov 2007 16:13:39 +0000</pubDate>
+ <enclosure
url="http://eco.netvibes.com/thumb/206468"
type="image/jpeg" length=""/>
+ </item>
+ <item>
+ <title><![CDATA[SVG reference]]></title>
+
+ <
link>http://freebestoffer.com/downloads/svg.html</link>
+ <
guid>http://eco.netvibes.com/6/206467</guid>
+ <description><![CDATA[Search through SVG help, reference, tutorials and
examples.]]></description>
+ <pubDate>Tue, 13 Nov 2007 16:13:42 +0000</pubDate>
+ <enclosure
url="http://eco.netvibes.com/thumb/206467"
type="image/jpeg" length=""/>
+ </item>
+ <item>
+
+ <title><![CDATA[SQL reference]]></title>
+ <
link>http://freebestoffer.com/downloads/sql.html</link>
+ <
guid>http://eco.netvibes.com/6/206466</guid>
+ <description><![CDATA[Search through SQL help, reference, tutorials and
examples.]]></description>
+ <pubDate>Tue, 13 Nov 2007 16:13:44 +0000</pubDate>
+ <enclosure
url="http://eco.netvibes.com/thumb/206466"
type="image/jpeg" length=""/>
+ </item>
+
+ <item>
+ <title><![CDATA[SMIL reference]]></title>
+ <
link>http://freebestoffer.com/downloads/smil.html</link>
+ <
guid>http://eco.netvibes.com/6/206465</guid>
+ <description><![CDATA[Search through SMIL help, reference, tutorials and
examples.]]></description>
+ <pubDate>Tue, 13 Nov 2007 16:13:47 +0000</pubDate>
+ <enclosure
url="http://eco.netvibes.com/thumb/206465"
type="image/jpeg" length=""/>
+
+ </item>
+ <item>
+ <title><![CDATA[PHP reference]]></title>
+ <
link>http://freebestoffer.com/downloads/php.html</link>
+ <
guid>http://eco.netvibes.com/6/206464</guid>
+ <description><![CDATA[Search through PHP help, reference, tutorials and
examples.]]></description>
+ <pubDate>Tue, 13 Nov 2007 16:13:51 +0000</pubDate>
+
+ <enclosure
url="http://eco.netvibes.com/thumb/206464"
type="image/jpeg" length=""/>
+ </item>
+ <item>
+ <title><![CDATA[Javascript Reference]]></title>
+ <
link>http://freebestoffer.com/downloads/javascript.html</link>
+ <
guid>http://eco.netvibes.com/6/206463</guid>
+ <description><![CDATA[Search and browse Javascript
Reference.]]></description>
+
+ <pubDate>Tue, 13 Nov 2007 16:13:54 +0000</pubDate>
+ <enclosure
url="http://eco.netvibes.com/thumb/206463"
type="image/jpeg" length=""/>
+ </item>
+ <item>
+ <title><![CDATA[HTML DOM Reference]]></title>
+ <
link>http://freebestoffer.com/downloads/htmldom.html</link>
+ <
guid>http://eco.netvibes.com/6/206459</guid>
+
+ <description><![CDATA[Search and browse HTML DOM
Reference.]]></description>
+ <pubDate>Tue, 13 Nov 2007 16:13:59 +0000</pubDate>
+ <enclosure
url="http://eco.netvibes.com/thumb/206459"
type="image/jpeg" length=""/>
+ </item>
+ </channel>
+</rss>
\ No newline at end of file