[portal-commits] JBoss Portal SVN: r8975 - in branches/JBoss_Portal_Branch_2_6/widget: src/main/org/jboss/portal/test/widget/google and 10 other directories.

portal-commits at lists.jboss.org portal-commits at lists.jboss.org
Fri Nov 16 10:13:47 EST 2007


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 at 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/multipleFeeds.php?provider=jerusalempost", 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 at 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=10&cat=14&type=all&q=foo", 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&count=11&cat=5&type=foo&q=bar", 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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"/>&nbsp;
+      <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>&nbsp;
+      <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>&nbsp;
+      <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"/>&nbsp;
+   </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?provider=jerusalempost</link>
+      <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




More information about the portal-commits mailing list