The attached patch includes the following changes to the capability
handling:
--> Client define a preferred Mimetype. In J1 the first mimetype in the list
was returned as the preferred mimetype.
--> Unit test tests all supported clients/mimetypes and mediatypes
--> Added support for Opera 7

The updated doc (schema changes, supported types ) will follow soon.

Roger
Index: portal/src/java/org/apache/jetspeed/capability/CapabilityMap.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/capability/CapabilityMap.java,v
retrieving revision 1.3
diff -u -r1.3 CapabilityMap.java
--- portal/src/java/org/apache/jetspeed/capability/CapabilityMap.java   22 Dec 2003 
02:18:22 -0000      1.3
+++ portal/src/java/org/apache/jetspeed/capability/CapabilityMap.java   26 Dec 2003 
01:48:44 -0000
@@ -112,6 +112,12 @@
     public MediaType getPreferredMediaType();
 
     /**
+     * Sets the preferred MediaType for this CapabilityMap
+     * @param MediaTypeEntry 
+     */
+    public void setPreferredMediaType(MediaType type);
+
+    /**
      * Returns an ordered list of supported media-types, from most preferred
      * to least preferred
      */
@@ -143,9 +149,9 @@
 
     /**
      * Get the mime types that this CapabilityMap supports.
-     * @return Array of Mimetypes
+     * @return Returns an Iterator over the MimeType map
      */
-    public MimeType[] getMimeTypes();
+    public Iterator getMimeTypes();
 
     /**
      * @param  MimeType
Index: portal/src/java/org/apache/jetspeed/capability/CapabilityService.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/capability/CapabilityService.java,v
retrieving revision 1.2
diff -u -r1.2 CapabilityService.java
--- portal/src/java/org/apache/jetspeed/capability/CapabilityService.java       22 Dec 
2003 02:18:22 -0000      1.2
+++ portal/src/java/org/apache/jetspeed/capability/CapabilityService.java       26 Dec 
2003 01:48:45 -0000
@@ -104,7 +104,7 @@
      * TODO: Roger, why is this on the public interface. It seems to be impl specific 
      */
     void deleteCapabilityMapCache();
-    
+
     /**
      * Given a media type string, look up the corresponding media type object.
      * 
@@ -112,5 +112,12 @@
      * @return The found media type object or if not found, null.
      */
     MediaType getMediaType(String mediaType);
-            
+
+    /**
+     * Given a Mimetype string lookup the corresponding media type object
+     * @param mimeTypeName to use for lookup
+     * @return MediaTypeEntry that matches the lookup in the MEDIATYPE_TO_MIMETYPE 
table
+     */
+    public MediaType getMediaTypeForMimeType(String mimeTypeName);
+
 }
Index: portal/src/java/org/apache/jetspeed/capability/Client.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/capability/Client.java,v
retrieving revision 1.2
diff -u -r1.2 Client.java
--- portal/src/java/org/apache/jetspeed/capability/Client.java  22 Dec 2003 02:18:22 
-0000      1.2
+++ portal/src/java/org/apache/jetspeed/capability/Client.java  26 Dec 2003 01:48:45 
-0000
@@ -172,7 +172,19 @@
     /**
      * Assigns a list of capabilities
      * @param capabilities
-      */
+     */
     public void setCapabilities(Collection capabilities);
+
+    /**
+     * getPreferredMimeTypeId
+     * @return mimeTypeId
+     */
+    public int getPreferredMimeTypeId();
+
+    /**
+     * setPreferredMimeTypeId
+     * @param mimeTypeId to be set as preferred mimeType
+     */
+    public void setPreferredMimeTypeId(int mimeTypeId);
 
 }
Index: portal/src/java/org/apache/jetspeed/capability/impl/CapabilityMapImpl.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/capability/impl/CapabilityMapImpl.java,v
retrieving revision 1.2
diff -u -r1.2 CapabilityMapImpl.java
--- portal/src/java/org/apache/jetspeed/capability/impl/CapabilityMapImpl.java  22 Dec 
2003 02:18:22 -0000      1.2
+++ portal/src/java/org/apache/jetspeed/capability/impl/CapabilityMapImpl.java  26 Dec 
2003 01:48:46 -0000
@@ -79,6 +79,7 @@
     // supported Capabilities for Agent
     private Map mediaTypeMap = new HashMap(); // supported MediaTypes for Agent
     private Client client; // client for Agent
+    private MediaType preferredMediaType; // Preferred MediaType for client.
 
     /**
         Sets the client for the CapabilityMap
@@ -125,15 +126,29 @@
     */
     public MimeType getPreferredType()
     {
-        // Return first entry
+        // Return the value that matches the preferredMimeType defined in the Client
+        int prefMimeTypeId = this.client.getPreferredMimeTypeId();
+        MimeType mt = null;
+
         Iterator e = this.mimeTypeMap.values().iterator();
-        if (e.hasNext())
-        {
-            return (MimeType) e.next();
-        } else
+        while (e.hasNext())
         {
-            return null; // TODO: NEVER return null
+            mt = (MimeType) e.next();
+            if (mt.getMimetypeId() == prefMimeTypeId)
+                return mt;
         }
+
+        // Should never reach this point. A preferred value needs to be set
+        return null; // TODO: NEVER RETURN NULL
+    }
+
+    /**
+          * Sets the preferred MediaType for this CapabilityMap
+          * @param MediaTypeEntry 
+        */
+    public void setPreferredMediaType(MediaType type)
+    {
+        this.preferredMediaType = type;
     }
 
     /**
@@ -141,13 +156,7 @@
     */
     public MediaType getPreferredMediaType()
     {
-        // Return first entry
-        Iterator e = this.mediaTypeMap.values().iterator();
-        if (e.hasNext())
-        {
-            return (MediaType) e.next();
-        } 
-        return null; // TODO: NEVER RETURN NULL
+        return this.preferredMediaType;
     }
 
     /**
@@ -211,9 +220,9 @@
     /**
     Get the mime types that this CapabilityMap supports.
     */
-    public MimeType[] getMimeTypes()
+    public Iterator getMimeTypes()
     {
-        return null;
+        return mimeTypeMap.values().iterator();
     }
 
     /**
Index: portal/src/java/org/apache/jetspeed/capability/impl/CapabilityServiceImpl.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/capability/impl/CapabilityServiceImpl.java,v
retrieving revision 1.2
diff -u -r1.2 CapabilityServiceImpl.java
--- portal/src/java/org/apache/jetspeed/capability/impl/CapabilityServiceImpl.java     
 22 Dec 2003 02:18:22 -0000      1.2
+++ portal/src/java/org/apache/jetspeed/capability/impl/CapabilityServiceImpl.java     
 26 Dec 2003 01:48:47 -0000
@@ -250,6 +250,14 @@
                     map.addMediaType((MediaType) media.next());
                 }
 
+                //Set preferred Mimetype
+                MimeType mimeType = map.getPreferredType();
+
+                MediaType mtEntry =
+                    getMediaTypeForMimeType(map.getPreferredType().getName());
+
+                map.setPreferredMediaType(mtEntry);
+
                 // Add map to cache
                 capabilityMapCache.put(userAgent, map);
 
@@ -359,7 +367,7 @@
         while (mimetypes.hasNext())
         {
             MimeType mt = (MimeType) mimetypes.next();
-            
+
             // Add mimetype to query
             // Note: mimetypes is a member of MediaTypeImpl
             // criteria.addEqualTo("mimetypes.name", mt.getName());
@@ -368,12 +376,13 @@
         }
         criteria.addIn("mimetypes.name", temp);
 
-        Collection co = plugin.getCollectionByQuery(
-            mediaTypeClass,
-            plugin.generateQuery(mediaTypeClass, criteria));
-            
+        Collection co =
+            plugin.getCollectionByQuery(
+                mediaTypeClass,
+                plugin.generateQuery(mediaTypeClass, criteria));
+
         if (co.isEmpty())
-        {            
+        {
             System.out.println("collection is empty");
             MediaType mt = getMediaType("html");
             Vector v = new Vector();
@@ -381,8 +390,8 @@
             return v;
         }
         System.out.println("collection is NOT empty");
-                
-        return co;                   
+
+        return co;
     }
 
     /* 
@@ -401,7 +410,34 @@
     {
         LookupCriteria criteria = plugin.newLookupCriteria();
         criteria.addEqualTo("name", mediaType);
-        Object query = plugin.generateQuery(mediaTypeClass, criteria);        
+        Object query = plugin.generateQuery(mediaTypeClass, criteria);
         return (MediaType) plugin.getObjectByQuery(mediaTypeClass, query);
+    }
+
+    /**
+     * getMediaTypeForMimeType
+     * @param mimeType to use for lookup
+     * @return MediaTypeEntry that matches the lookup in the MEDIATYPE_TO_MIMETYPE 
table
+     */
+    public MediaType getMediaTypeForMimeType(String mimeTypeName)
+    {
+        //Find the MediaType by matching the Mimetype
+
+        LookupCriteria criteria = plugin.newLookupCriteria();
+        criteria.addEqualTo("mimetypes.name", mimeTypeName);
+
+        Collection mediaTypeCollection =
+            plugin.getCollectionByQuery(
+                mediaTypeClass,
+                plugin.generateQuery(mediaTypeClass, criteria));
+
+        Iterator mtIterator = mediaTypeCollection.iterator();
+        if (mtIterator.hasNext())
+        {
+            return (MediaType) mtIterator.next();
+        } else
+        {
+            return null;
+        }
     }
 }
Index: portal/src/java/org/apache/jetspeed/capability/impl/ClientImpl.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/capability/impl/ClientImpl.java,v
retrieving revision 1.2
diff -u -r1.2 ClientImpl.java
--- portal/src/java/org/apache/jetspeed/capability/impl/ClientImpl.java 22 Dec 2003 
02:18:22 -0000      1.2
+++ portal/src/java/org/apache/jetspeed/capability/impl/ClientImpl.java 26 Dec 2003 
01:48:47 -0000
@@ -65,8 +65,7 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">Roger Ruttimann</a>
  * @version $Id: ClientImpl.java,v 1.2 2003/12/22 02:18:22 taylor Exp $
  */
-public class ClientImpl 
-    implements Client, java.io.Serializable
+public class ClientImpl implements Client, java.io.Serializable
 {
     private String userAgentPattern = "";
     private String manufacturer = "";
@@ -75,82 +74,78 @@
     private String name;
     private Collection mimetypes;
     private Collection capabilities;
-    
+    private int preferredMimeTypeId;
+
     private int clientId;
 
     public ClientImpl()
     {
     }
 
-    
     /**
      * Implements the equals operation so that 2 elements are equal if
      * all their member values are equal.
      */
     public boolean equals(Object object)
     {
-        if (object==null)
+        if (object == null)
         {
             return false;
         }
 
-        ClientImpl obj = (ClientImpl)object;
+        ClientImpl obj = (ClientImpl) object;
 
-        if (userAgentPattern!=null)
+        if (userAgentPattern != null)
         {
             if (!userAgentPattern.equals(obj.userAgentPattern))
             {
                 return false;
             }
-        }
-        else
+        } else
         {
-            if (obj.userAgentPattern!=null)
+            if (obj.userAgentPattern != null)
             {
                 return false;
             }
         }
 
-        if (manufacturer!=null)
+        if (manufacturer != null)
         {
             if (!manufacturer.equals(obj.manufacturer))
             {
                 return false;
             }
-        }
-        else
+        } else
         {
-            if (obj.manufacturer!=null)
+            if (obj.manufacturer != null)
             {
                 return false;
             }
         }
 
-        if (model!=null)
+        if (model != null)
         {
             if (!model.equals(obj.model))
             {
                 return false;
             }
-        }
-        else
+        } else
         {
-            if (obj.model!=null)
+            if (obj.model != null)
             {
                 return false;
             }
         }
 
-        if (version!=null)
+        if (version != null)
         {
             if (!version.equals(obj.version))
             {
                 return false;
             }
-        }
-        else
+        } else
         {
-            if (obj.version!=null)
+            if (obj.version != null)
             {
                 return false;
             }
@@ -209,7 +204,6 @@
         version = name;
     }
 
-
     public Collection getMimetypes()
     {
         return mimetypes;
@@ -229,7 +223,7 @@
     {
         this.capabilities = capabilities;
     }
-    
+
     /**
      * Set Client ID -- Assigns the Client ID
      * @param id
@@ -238,7 +232,7 @@
     {
         this.clientId = id;
     }
-    
+
     /**
      * Get Client ID
      * @return Client ID
@@ -261,6 +255,23 @@
     public void setName(String string)
     {
         name = string;
+    }
+
+    /**
+     * @return Preferred MimeType ID for Client
+     */
+    public int getPreferredMimeTypeId()
+    {
+        return this.preferredMimeTypeId;
+    }
+
+    /**
+     * Set preferred Mimetype ID for Client
+     * @param mimeTypeId MimeTypeId
+     */
+    public void setPreferredMimeTypeId(int mimeTypeId)
+    {
+        this.preferredMimeTypeId = mimeTypeId;
     }
 
 }
Index: portal/src/sql/hsql/create-db.sql
===================================================================
RCS file: /home/cvspublic/jakarta-jetspeed-2/portal/src/sql/hsql/create-db.sql,v
retrieving revision 1.9
diff -u -r1.9 create-db.sql
--- portal/src/sql/hsql/create-db.sql   5 Dec 2003 21:09:22 -0000       1.9
+++ portal/src/sql/hsql/create-db.sql   26 Dec 2003 01:48:51 -0000
@@ -171,7 +171,8 @@
     USER_AGENT_PATTERN VARCHAR (128),
     MANUFACTURER VARCHAR (80),
     MODEL VARCHAR(80),
-    VERSION VARCHAR(40)
+    VERSION VARCHAR(40),
+    PREFERRED_MIMETYPE_ID INTEGER NOT NULL
 );
 
 ------------------------------------------------------------------------------
Index: portal/src/sql/hsql/populate-db-default.sql
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/sql/hsql/populate-db-default.sql,v
retrieving revision 1.6
diff -u -r1.6 populate-db-default.sql
--- portal/src/sql/hsql/populate-db-default.sql 17 Dec 2003 20:46:34 -0000      1.6
+++ portal/src/sql/hsql/populate-db-default.sql 26 Dec 2003 01:48:52 -0000
@@ -77,44 +77,47 @@
 ----------------------------------------------------------------------------
 -- Supported clients
 ----------------------------------------------------------------------------
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(1,'ie5','.*MSIE 5.*','Microsoft','None','5.5');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(1,'ie5','.*MSIE 5.*','Microsoft','None','5.5',0);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(2,'ns4','.*Mozilla/4.*','Netscape','None','4.75');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(2,'ns4','.*Mozilla/4.*','Netscape','None','4.75',0);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(3,'mozilla','.*Mozilla/5.*','Mozilla','Mozilla','1.x');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(3,'mozilla','.*Mozilla/5.*','Mozilla','Mozilla','1.x',0);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(4,'lynx','Lynx.*','GNU','None','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(4,'lynx','Lynx.*','GNU','None','',0);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(5,'nokia_generic','Nokia.*','Nokia','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(5,'nokia_generic','Nokia.*','Nokia','Generic','',1);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(6,'up','UP.*|.*UP\.Browser.*','United Planet','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(6,'up','UP.*|.*UP\.Browser.*','United Planet','Generic','',1);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(7,'sonyericsson','Ercis.*|SonyE.*','SonyEricsson','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(7,'sonyericsson','Ercis.*|SonyE.*','SonyEricsson','Generic','',1);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(8,'wapalizer','Wapalizer.*','Wapalizer','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(8,'wapalizer','Wapalizer.*','Wapalizer','Generic','',1);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(9,'klondike','Klondike.*','Klondike','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(9,'klondike','Klondike.*','Klondike','Generic','',1);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(10,'wml_generic','.*WML.*|.*WAP.*|.*Wap.*|.*wml.*','Generic','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(10,'wml_generic','.*WML.*|.*WAP.*|.*Wap.*|.*wml.*','Generic','Generic','',1);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(11,'vxml_generic','.*VoiceXML.*','Generic','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(11,'vxml_generic','.*VoiceXML.*','Generic','Generic','',2);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(12,'nuance','Nuance.*','Nuance','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(12,'nuance','Nuance.*','Nuance','Generic','',2);
 
-INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL ,VERSION)
-VALUES(13,'agentxml','agentxml/1.0.*','Unknown','Generic','');
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(13,'agentxml','agentxml/1.0.*','Unknown','Generic','',3);
+
+INSERT INTO CLIENT (CLIENT_ID,NAME,    USER_AGENT_PATTERN,MANUFACTURER,MODEL 
,VERSION, PREFERRED_MIMETYPE_ID)
+VALUES(14,'opera7','.*Opera/7.*','Opera','Opera7','7.x',0);
 
 
----------------------------------------------------------------------------------------
 -- Supported Media types
@@ -190,6 +193,23 @@
 INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(4,6);
 INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(4,39);
 
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,0);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,1);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,2);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,7);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,11);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,16);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,3);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,5);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,6);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,4);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,26);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,23);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,24);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,25);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,30);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,39);
+INSERT INTO CLIENT_TO_CAPABILITY(CLIENT_ID,CAPABILITY_ID )VALUES(14,22);
 
 -- Client To Mimetype
 
@@ -221,6 +241,10 @@
 INSERT INTO CLIENT_TO_MIMETYPE(CLIENT_ID ,MIMETYPE_ID)VALUES(12,2);
 
 INSERT INTO CLIENT_TO_MIMETYPE(CLIENT_ID ,MIMETYPE_ID)VALUES(13,3);
+
+INSERT INTO CLIENT_TO_MIMETYPE(CLIENT_ID ,MIMETYPE_ID)VALUES(14,0);
+INSERT INTO CLIENT_TO_MIMETYPE(CLIENT_ID ,MIMETYPE_ID)VALUES(14,3);
+INSERT INTO CLIENT_TO_MIMETYPE(CLIENT_ID ,MIMETYPE_ID)VALUES(14,4);
 
 ----------------------------------------------------
 -- Media Type association
Index: portal/src/test/org/apache/jetspeed/capability/TestCapability.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/test/org/apache/jetspeed/capability/TestCapability.java,v
retrieving revision 1.2
diff -u -r1.2 TestCapability.java
--- portal/src/test/org/apache/jetspeed/capability/TestCapability.java  22 Dec 2003 
02:18:23 -0000      1.2
+++ portal/src/test/org/apache/jetspeed/capability/TestCapability.java  26 Dec 2003 
01:48:52 -0000
@@ -51,9 +51,10 @@
  * information on the Apache Software Foundation, please see
  * <http://www.apache.org/>.
  */
- 
+
 package org.apache.jetspeed.capability;
 
+import java.util.Iterator;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
@@ -65,11 +66,11 @@
  * Test Capability Service
  *
  * @author <a href="[EMAIL PROTECTED]">Roger Ruttimann</a>
- * @version $Id: TestCapability.java,v 1.2 2003/12/22 02:18:23 taylor Exp $
+ * @version $Id: TestCapability.java,v 1.1 2003/12/05 21:09:22 taylor Exp $
  */
-public class TestCapability extends JetspeedTest 
-{    
-    
+public class TestCapability extends JetspeedTest
+{
+
     /**
      * @see 
org.apache.jetspeed.test.JetspeedTest#overrideProperties(org.apache.commons.configuration.Configuration)
      */
@@ -77,7 +78,7 @@
     {
         super.overrideProperties(properties);
     }
-    
+
     /**
      * Defines the testcase name for JUnit.
      *
@@ -87,7 +88,7 @@
     {
         super(name);
     }
-    
+
     /**
      * Start the tests.
      *
@@ -95,9 +96,10 @@
      */
     public static void main(String args[])
     {
-         junit.awtui.TestRunner.main(new String[] { TestCapability.class.getName()});
+        junit.awtui.TestRunner.main(
+            new String[] { TestCapability.class.getName()});
     }
-    
+
     public void setup()
     {
         System.out.println("Setup: Testing Capability Service");
@@ -113,44 +115,93 @@
         // All methods starting with "test" will be executed in the test suite.
         return new TestSuite(TestCapability.class);
     }
-    
+
     protected CapabilityService getService()
     {
-        return (CapabilityService) 
CommonPortletServices.getPortalService(CapabilityService.SERVICE_NAME);
+        return (CapabilityService) CommonPortletServices.getPortalService(
+            CapabilityService.SERVICE_NAME);
     }
-    
+
     /**
      * Tests categories
      * @throws Exception
      */
     public void testCapability() throws Exception
     {
-        CapabilityService service = getService();               
+        CapabilityService service = getService();
         assertNotNull("capability service is null", service);
 
         // Find specific client -- testing pattern matching
         String userAgent;
-        System.out.println("Test pattern matching...")  ;   
-        
-        userAgent = "Mozilla/4.0";
-        System.out.println("Find pattern: " + userAgent)  ;   
-        
+        System.out.println("Testing all supported Clients...");
+
+        userAgent = "Opera/7.0";
+        System.out.println("Find pattern: " + userAgent);
         CapabilityMap cm = service.getCapabilityMap(userAgent);
         assertNotNull("getCapabilityMap is null", cm);
-        
+        capabilityMapReport(cm);
+
+        userAgent = "Mozilla/4.0";
+        System.out.println("Find pattern: " + userAgent);
+        cm = service.getCapabilityMap(userAgent);
+        assertNotNull("getCapabilityMap is null", cm);
+        capabilityMapReport(cm);
+
+        userAgent = "MSIE 5.0";
+        System.out.println("Find pattern: " + userAgent);
+        cm = service.getCapabilityMap(userAgent);
+        assertNotNull("getCapabilityMap is null", cm);
+        capabilityMapReport(cm);
+
+        userAgent = "Mozilla/5.0";
+        System.out.println("Find pattern: " + userAgent);
+        cm = service.getCapabilityMap(userAgent);
+        assertNotNull("getCapabilityMap is null", cm);
+        capabilityMapReport(cm);
+
+        userAgent = "Lynx";
+        System.out.println("Find pattern: " + userAgent);
+        cm = service.getCapabilityMap(userAgent);
+        assertNotNull("getCapabilityMap is null", cm);
+        capabilityMapReport(cm);
+
+        userAgent = "Nokia";
+        System.out.println("Find pattern: " + userAgent);
+        cm = service.getCapabilityMap(userAgent);
+        assertNotNull("getCapabilityMap is null", cm);
+        capabilityMapReport(cm);
+
+    }
+
+    private void capabilityMapReport(CapabilityMap cm)
+    {
         MediaType mediaType = cm.getPreferredMediaType();
-        assertNotNull("MediaType is null", mediaType); 
-        
-        MimeType mimeTypeObj =    cm.getPreferredType();
-        assertNotNull("MimeType is null", mimeTypeObj);         
+        assertNotNull("Preferred MediaType is null", mediaType);
+
+        MimeType mimeTypeObj = cm.getPreferredType();
+        assertNotNull("Preferred MimeType is null", mimeTypeObj);
         String mimeType = mimeTypeObj.getName();
-         
+
         String encoding = mediaType.getCharacterSet();
-        
-        System.out.println("MediaType = " + mediaType.getName());
-        System.out.println("Mimetype = " + mimeType);
+
+        System.out.println("Preferred MediaType = " + mediaType.getName());
+        System.out.println("Preferred Mimetype = " + mimeType);
         System.out.println("Encoding = " + encoding);
-                
+        System.out.println("Supported MediaTypes");
+        Iterator cmIterator = cm.listMediaTypes();
+
+        while (cmIterator.hasNext())
+        {
+            System.out.println(((MediaType) cmIterator.next()).getName());
+        }
+
+        System.out.println("Supported MimeTypes");
+        Iterator mtIterator = cm.getMimeTypes();
+
+        while (mtIterator.hasNext())
+        {
+            System.out.println(((MimeType) mtIterator.next()).getName());
+        }
     }
 
 }
Index: portal/src/webapp/WEB-INF/conf/ojb/repository_jetspeed.xml
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/webapp/WEB-INF/conf/ojb/repository_jetspeed.xml,v
retrieving revision 1.14
diff -u -r1.14 repository_jetspeed.xml
--- portal/src/webapp/WEB-INF/conf/ojb/repository_jetspeed.xml  22 Dec 2003 02:18:23 
-0000      1.14
+++ portal/src/webapp/WEB-INF/conf/ojb/repository_jetspeed.xml  26 Dec 2003 01:48:55 
-0000
@@ -905,6 +905,12 @@
          jdbc-type="VARCHAR"     
       />
       
+      <field-descriptor
+         name="preferredMimeTypeId"
+         column="PREFERRED_MIMETYPE_ID"
+         jdbc-type="INTEGER"     
+      />
+      
       <collection-descriptor
           name="capabilities"
           element-class-ref="org.apache.jetspeed.capability.impl.CapabilityImpl"
Index: portal/src/webapp/WEB-INF/db/hsql/Registry.script
===================================================================
RCS file: 
/home/cvspublic/jakarta-jetspeed-2/portal/src/webapp/WEB-INF/db/hsql/Registry.script,v
retrieving revision 1.15
diff -u -r1.15 Registry.script
--- portal/src/webapp/WEB-INF/db/hsql/Registry.script   22 Dec 2003 02:18:23 -0000     
 1.15
+++ portal/src/webapp/WEB-INF/db/hsql/Registry.script   26 Dec 2003 01:48:57 -0000
@@ -20,7 +20,7 @@
 CREATE TABLE LOCALIZED_DESCRIPTION(ID INTEGER NOT NULL PRIMARY KEY,OBJECT_ID INTEGER 
NOT NULL,TYPE VARCHAR(25) NOT NULL,DESCRIPTION LONGVARCHAR NOT NULL,LOCALE_STRING 
VARCHAR(50) NOT NULL)
 CREATE TABLE LOCALIZED_DISPLAY_NAME(ID INTEGER NOT NULL PRIMARY KEY,OBJECT_ID INTEGER 
NOT NULL,TYPE VARCHAR(25) NOT NULL,DISPLAY_NAME LONGVARCHAR NOT NULL,LOCALE_STRING 
VARCHAR(50) NOT NULL)
 CREATE TABLE MEDIA_TYPE(MEDIATYPE_ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(80) 
NOT NULL,CHARACTER_SET VARCHAR(40),TITLE VARCHAR(80),DESCRIPTION LONGVARCHAR)
-CREATE TABLE CLIENT(CLIENT_ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(80) NOT 
NULL,USER_AGENT_PATTERN VARCHAR(128),MANUFACTURER VARCHAR(80),MODEL 
VARCHAR(80),VERSION VARCHAR(40))
+CREATE TABLE CLIENT(CLIENT_ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(80) NOT 
NULL,USER_AGENT_PATTERN VARCHAR(128),MANUFACTURER VARCHAR(80),MODEL 
VARCHAR(80),VERSION VARCHAR(40),PREFERRED_MIMETYPE_ID INTEGER NOT NULL)
 CREATE TABLE MIMETYPE(MIMETYPE_ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(80) NOT 
NULL)
 CREATE TABLE CAPABILITY(CAPABILITY_ID INTEGER NOT NULL PRIMARY KEY,CAPABILITY 
VARCHAR(80) NOT NULL)
 CREATE TABLE CLIENT_TO_CAPABILITY(CLIENT_ID INTEGER NOT NULL,CAPABILITY_ID INTEGER 
NOT NULL)
@@ -55,8 +55,8 @@
 CREATE TABLE PREF_PROPERTY_VALUE(PROPERTY_VALUE_ID INTEGER NOT NULL PRIMARY 
KEY,PROPERTY_KEY_ID INTEGER,NODE_ID INTEGER,BOOLEAN_VALUE BIT,DATETIME_VALUE 
TIMESTAMP,LONG_VALUE INTEGER,DOUBLE_VALUE DOUBLE,TEXT_VALUE VARCHAR(254),CREATION_DATE 
TIMESTAMP,MODIFIED_DATE TIMESTAMP,CONSTRAINT PREF_PROPERTY_VALUE_FK_1 FOREIGN 
KEY(NODE_ID) REFERENCES PREF_NODE(NODE_ID))
 CREATE TABLE PREF_PROPERTY_KEY(PROPERTY_KEY_ID INTEGER NOT NULL PRIMARY 
KEY,PROPERTY_SET_DEF_ID INTEGER,PROPERTY_NAME VARCHAR(100),PROPERTY_TYPE 
SMALLINT,CREATION_DATE TIMESTAMP,MODIFIED_DATE TIMESTAMP,CONSTRAINT 
PREF_PROPERTY_KEY_FK_1 FOREIGN KEY(PROPERTY_SET_DEF_ID) REFERENCES 
PREF_PROPERTY_SET_DEF(PROPERTY_SET_DEF_ID))
 ALTER TABLE PREF_PROPERTY_VALUE ADD CONSTRAINT PREF_PROPERTY_VALUE_FK_2 FOREIGN 
KEY(PROPERTY_KEY_ID) REFERENCES PREF_PROPERTY_KEY(PROPERTY_KEY_ID)
-GRANT ALL ON CLASS "org.hsqldb.Library" TO PUBLIC
 GRANT ALL ON CLASS "java.lang.Math" TO PUBLIC
+GRANT ALL ON CLASS "org.hsqldb.Library" TO PUBLIC
 CREATE USER SA PASSWORD "" ADMIN
 CREATE ALIAS DAYNAME FOR "org.hsqldb.Library.dayname"
 CREATE ALIAS SPACE FOR "org.hsqldb.Library.space"
@@ -75,7 +75,7 @@
 CREATE ALIAS LOWER FOR "org.hsqldb.Library.lcase"
 CREATE ALIAS ATAN2 FOR "java.lang.Math.atan2"
 CREATE ALIAS REPEAT FOR "org.hsqldb.Library.repeat"
-CREATE ALIAS DAYOFMONTH FOR "org.hsqldb.Library .dayofmonth"
+CREATE ALIAS DAYOFMONTH FOR "org.hsqldb.Library.dayofmonth"
 CREATE ALIAS TAN FOR "java.lang.Math.tan"
 CREATE ALIAS RADIANS FOR "java.lang.Math.toRadians"
 CREATE ALIAS FLOOR FOR "java.lang.Math.floor"
@@ -133,19 +133,20 @@
 INSERT INTO MEDIA_TYPE VALUES(1,'wml','UTF-8','WML','Format for mobile phones and 
PDAs compatible with WML 1.1')
 INSERT INTO MEDIA_TYPE VALUES(2,'vxml','UTF-8','VoiceXML','Format suitable for use 
with an audio VoiceXML server')
 INSERT INTO MEDIA_TYPE VALUES(3,'xml','','XML','XML 1.0')
-INSERT INTO CLIENT VALUES(1,'ie5','.*MSIE 5.*','Microsoft','None','5.5')
-INSERT INTO CLIENT VALUES(2,'ns4','.*Mozilla/4.*','Netscape','None','4.75')
-INSERT INTO CLIENT VALUES(3,'mozilla','.*Mozilla/5.*','Mozilla','Mozilla','1.x')
-INSERT INTO CLIENT VALUES(4,'lynx','Lynx.*','GNU','None','')
-INSERT INTO CLIENT VALUES(5,'nokia_generic','Nokia.*','Nokia','Generic','')
-INSERT INTO CLIENT VALUES(6,'up','UP.*|.*UP\.Browser.*','United Planet','Generic','')
-INSERT INTO CLIENT 
VALUES(7,'sonyericsson','Ercis.*|SonyE.*','SonyEricsson','Generic','')
-INSERT INTO CLIENT VALUES(8,'wapalizer','Wapalizer.*','Wapalizer','Generic','')
-INSERT INTO CLIENT VALUES(9,'klondike','Klondike.*','Klondike','Generic','')
-INSERT INTO CLIENT 
VALUES(10,'wml_generic','.*WML.*|.*WAP.*|.*Wap.*|.*wml.*','Generic','Generic','')
-INSERT INTO CLIENT VALUES(11,'vxml_generic','.*VoiceXML.*','Generic','Generic','')
-INSERT INTO CLIENT VALUES(12,'nuance','Nuance.*','Nuance','Generic','')
-INSERT INTO CLIENT VALUES(13,'agentxml','agentxml/1.0.*','Unknown','Generic','')
+INSERT INTO CLIENT VALUES(1,'ie5','.*MSIE 5.*','Microsoft','None','5.5',0)
+INSERT INTO CLIENT VALUES(2,'ns4','.*Mozilla/4.*','Netscape','None','4.75',0)
+INSERT INTO CLIENT VALUES(3,'mozilla','.*Mozilla/5.*','Mozilla','Mozilla','1.x',0)
+INSERT INTO CLIENT VALUES(4,'lynx','Lynx.*','GNU','None','',0)
+INSERT INTO CLIENT VALUES(5,'nokia_generic','Nokia.*','Nokia','Generic','',1)
+INSERT INTO CLIENT VALUES(6,'up','UP.*|.*UP\.Browser.*','United 
Planet','Generic','',1)
+INSERT INTO CLIENT 
VALUES(7,'sonyericsson','Ercis.*|SonyE.*','SonyEricsson','Generic','',1)
+INSERT INTO CLIENT VALUES(8,'wapalizer','Wapalizer.*','Wapalizer','Generic','',1)
+INSERT INTO CLIENT VALUES(9,'klondike','Klondike.*','Klondike','Generic','',1)
+INSERT INTO CLIENT 
VALUES(10,'wml_generic','.*WML.*|.*WAP.*|.*Wap.*|.*wml.*','Generic','Generic','',1)
+INSERT INTO CLIENT VALUES(11,'vxml_generic','.*VoiceXML.*','Generic','Generic','',2)
+INSERT INTO CLIENT VALUES(12,'nuance','Nuance.*','Nuance','Generic','',2)
+INSERT INTO CLIENT VALUES(13,'agentxml','agentxml/1.0.*','Unknown','Generic','',3)
+INSERT INTO CLIENT VALUES(14,'opera7','.*Opera/7.*','Opera','Opera7','7.x',0)
 INSERT INTO MIMETYPE VALUES(0,'text/html')
 INSERT INTO MIMETYPE VALUES(1,'text/vnd.wap.wml')
 INSERT INTO MIMETYPE VALUES(2,'text/vxml')
@@ -243,6 +244,23 @@
 INSERT INTO CLIENT_TO_CAPABILITY VALUES(4,5)
 INSERT INTO CLIENT_TO_CAPABILITY VALUES(4,6)
 INSERT INTO CLIENT_TO_CAPABILITY VALUES(4,39)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,0)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,1)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,2)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,7)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,11)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,16)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,3)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,5)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,6)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,4)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,26)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,23)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,24)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,25)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,30)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,39)
+INSERT INTO CLIENT_TO_CAPABILITY VALUES(14,22)
 INSERT INTO CLIENT_TO_MIMETYPE VALUES(1,0)
 INSERT INTO CLIENT_TO_MIMETYPE VALUES(1,3)
 INSERT INTO CLIENT_TO_MIMETYPE VALUES(2,0)
@@ -259,6 +277,9 @@
 INSERT INTO CLIENT_TO_MIMETYPE VALUES(11,2)
 INSERT INTO CLIENT_TO_MIMETYPE VALUES(12,2)
 INSERT INTO CLIENT_TO_MIMETYPE VALUES(13,3)
+INSERT INTO CLIENT_TO_MIMETYPE VALUES(14,0)
+INSERT INTO CLIENT_TO_MIMETYPE VALUES(14,3)
+INSERT INTO CLIENT_TO_MIMETYPE VALUES(14,4)
 INSERT INTO MEDIATYPE_TO_MIMETYPE VALUES(0,0)
 INSERT INTO MEDIATYPE_TO_MIMETYPE VALUES(1,1)
 INSERT INTO MEDIATYPE_TO_MIMETYPE VALUES(2,2)

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to