[Registry-dev] svn commit r9928 - in trunk/registry/modules/core/src: main/java/org/wso2/registry main/java/org/wso2/registry/jdbc/dao main/java/org/wso2/registry/jdbc/queries test/java/org/wso2/registry/jdbc

svn at wso2.org svn at wso2.org
Mon Nov 19 21:49:35 PST 2007


Author: chathura
Date: Mon Nov 19 21:49:24 2007
New Revision: 9928

Added:
   trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/Rating.java
Modified:
   trunk/registry/modules/core/src/main/java/org/wso2/registry/RegistryConstants.java
   trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/RatingsDAO.java
   trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/queries/SQLQueryProcessor.java
   trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/JDBCRegistryTest.java
Log:

Implemented the extensible search for ratings.
Now it is possible to write custom SQL queries to return ratings as results.



Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/RegistryConstants.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/RegistryConstants.java	(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/RegistryConstants.java	Mon Nov 19 21:49:24 2007
@@ -77,5 +77,6 @@
     public static final String RESULT_TYPE_PROPERTY_NAME = "resultType";
     public static final String RESOURCES_RESULT_TYPE = "Resource";
     public static final String COMMENTS_RESULT_TYPE = "Comments";
+    public static final String RATINGS_RESULT_TYPE = "Ratings";
 
 }

Added: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/Rating.java
==============================================================================
--- (empty file)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/Rating.java	Mon Nov 19 21:49:24 2007
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2006, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.wso2.registry.jdbc.dao;
+
+import java.util.Date;
+
+public class Rating {
+
+    private long resourceID;
+    private String resourcePath;
+    private String ratedUserName;
+    private Date ratedTime;
+    private int rating;
+
+    public long getResourceID() {
+        return resourceID;
+    }
+
+    public void setResourceID(long resourceID) {
+        this.resourceID = resourceID;
+    }
+
+    public String getResourcePath() {
+        return resourcePath;
+    }
+
+    public void setResourcePath(String resourcePath) {
+        this.resourcePath = resourcePath;
+    }
+
+    public String getRatedUserName() {
+        return ratedUserName;
+    }
+
+    public void setRatedUserName(String ratedUserName) {
+        this.ratedUserName = ratedUserName;
+    }
+
+    public Date getRatedTime() {
+        return ratedTime;
+    }
+
+    public void setRatedTime(Date ratedTime) {
+        this.ratedTime = ratedTime;
+    }
+
+    public int getRating() {
+        return rating;
+    }
+
+    public void setRating(int rating) {
+        this.rating = rating;
+    }
+}

Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/RatingsDAO.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/RatingsDAO.java	(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/RatingsDAO.java	Mon Nov 19 21:49:24 2007
@@ -23,8 +23,8 @@
 import org.wso2.registry.LogEntry;
 
 import java.sql.*;
-import java.util.List;
-import java.util.ArrayList;
+import java.sql.Date;
+import java.util.*;
 
 public class RatingsDAO {
 
@@ -164,6 +164,32 @@
         return userNames;
     }
 
+    public Rating getRating(long ratingID, Connection conn) throws SQLException {
+
+        String sql = "SELECT A.PATH, R.AID, R.USER_ID, R.RATING, R.RATED_TIME FROM RATINGS R, ARTIFACTS A WHERE A.AID=R.AID AND R.R_ID=?";
+
+        PreparedStatement s = conn.prepareStatement(sql);
+        s.setLong(1, ratingID);
+
+        ResultSet results = s.executeQuery();
+        if (results.next()) {
+
+            java.util.Date ratedTime = new java.util.Date(
+                    results.getTimestamp(DatabaseConstants.RATED_TIME_FIELD).getTime());
+
+            Rating rating = new Rating();
+            rating.setRatedUserName(results.getString(DatabaseConstants.USER_ID_FIELD));
+            rating.setRatedTime(ratedTime);
+            rating.setRating(results.getInt(DatabaseConstants.RATING_FIELD));
+            rating.setResourcePath(results.getString(DatabaseConstants.PATH_FIELD));
+            rating.setResourceID(results.getLong(DatabaseConstants.AID_FIELD));
+
+            return rating;
+        }
+
+        return null;
+    }
+
     public List getLogs(String resourcePath, String userName,
                         java.util.Date from, java.util.Date to, Connection conn)
             throws SQLException {

Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/queries/SQLQueryProcessor.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/queries/SQLQueryProcessor.java	(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/queries/SQLQueryProcessor.java	Mon Nov 19 21:49:24 2007
@@ -22,6 +22,8 @@
 import org.wso2.registry.RegistryConstants;
 import org.wso2.registry.RegistryException;
 import org.wso2.registry.jdbc.DatabaseConstants;
+import org.wso2.registry.jdbc.dao.RatingsDAO;
+import org.wso2.registry.jdbc.dao.Rating;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -67,15 +69,16 @@
                 Resource commentsCollection = fillCommentsCollection(results, conn);
                 return commentsCollection;
 
+            } else if (resultType.equals(RegistryConstants.RATINGS_RESULT_TYPE)) {
+
+                Resource ratingsCollection = fillRatingsCollection(results, conn);
+                return ratingsCollection;
+
             }  else if (resultType.equals("Tags")) {
 
                 Resource tagsCollection = fillTagsCollection(results, conn);
                 return tagsCollection;
 
-            } else if (resultType.equals("Ratings")) {
-
-                // URL for a rating /p1/r1?rating&user=xyz
-            
             } else if (resultType.equals("TagsWithCount")) {
 
                 // Result is in the form of (tag, number of taggings) tuples
@@ -162,6 +165,38 @@
         return commentsCollection;
     }
 
+    private Resource fillRatingsCollection(ResultSet results, Connection conn)
+            throws SQLException {
+
+        // SQL query should resturn a list of DatabaseConstants.RATING_ID_FIELDs
+        // resultArtifact contains a String[] of URLs for ratings.
+
+        // URL for a comment <resource_path>;ratings:<userName>
+        // e.g. /p1/r1;ratings:ruwan
+
+        List ratingPathList = new ArrayList();
+
+        while (results.next()) {
+
+            long ratingID = results.getLong(DatabaseConstants.RATING_ID_FIELD);
+
+            RatingsDAO ratingsDAO = new RatingsDAO();
+            Rating rating = ratingsDAO.getRating(ratingID, conn);
+
+            String ratingPath = rating.getResourcePath() + ";ratings:" + rating.getRatedUserName();
+            ratingPathList.add(ratingPath);
+        }
+
+        String[] ratingPaths =
+                (String[]) ratingPathList.toArray(new String[ratingPathList.size()]);
+
+        Resource ratingsCollection = new Resource();
+        ratingsCollection.setDirectory(true);
+        ratingsCollection.setContent(ratingPaths);
+
+        return ratingsCollection;
+    }
+
     private Resource fillTagsCollection(ResultSet results, Connection conn) throws SQLException {
 
         // URL for a tag /p1/r1?tag=java&user=xyz

Modified: trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/JDBCRegistryTest.java
==============================================================================
--- trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/JDBCRegistryTest.java	(original)
+++ trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/JDBCRegistryTest.java	Mon Nov 19 21:49:24 2007
@@ -607,6 +607,69 @@
         }
     }
 
+    public void testUserDefinedRatingsQuery() {
+
+        try {
+
+            Resource r1 = new Resource();
+            String r1Content = "this is r1 content";
+            r1.setContent(r1Content.getBytes());
+            r1.setDescription("production ready.");
+            String r1Path = "/c3/r1";
+            registry.put(r1Path, r1);
+
+            Resource r2 = new Resource();
+            String r2Content = "content for r2 :)";
+            r2.setContent(r2Content);
+            r2.setDescription("ready for production use.");
+            String r2Path = "/c3/r2";
+            registry.put(r2Path, r2);
+
+            Resource r3 = new Resource();
+            String r3Content = "content for r3 :)";
+            r3.setContent(r3Content);
+            r3.setDescription("only for government use.");
+            String r3Path = "/c3/r3";
+            registry.put(r3Path, r3);
+
+            registry.rateResource("/c3/r1", 3);
+            registry.rateResource("/c3/r2", 4);
+            registry.rateResource("/c3/r3", 5);
+
+            String sql1 = "SELECT R.R_ID FROM RATINGS R, ARTIFACTS A WHERE A.AID=R.AID AND A.DESCRIPTION LIKE ?";
+            Resource q1 = new Resource();
+            q1.setContent(sql1);
+            q1.setMediaType(RegistryConstants.SQL_QUERY_MEDIA_TYPE);
+            q1.setProperty(RegistryConstants.RESULT_TYPE_PROPERTY_NAME,
+                    RegistryConstants.RATINGS_RESULT_TYPE);
+            registry.put("/qs/q2", q1);
+
+        } catch (RegistryException e) {
+            fail("Valid put resource scenarios failed.");
+        }
+
+        try {
+            Resource result1 = registry.executeQuery("/qs/q2", new String[] {"%production%"});
+
+            assertTrue("Search with result type Resource should return a directory.",
+                    result1.isDirectory());
+
+            String[] ratingPaths = (String[]) result1.getContent();
+            assertEquals("There should be two match ratings.", ratingPaths.length, 2);
+
+            Resource rating1 = registry.get(ratingPaths[0]);
+            assertEquals("First matching rating should be 3",
+                    ((Integer)rating1.getContent()).intValue(), 3);
+
+            Resource rating2 = registry.get(ratingPaths[1]);
+            assertEquals("First matching rating should be 3",
+                    ((Integer)rating2.getContent()).intValue(), 4);            
+
+        } catch (RegistryException e) {
+            fail("Failed to execute query.");
+        }
+    }
+
     public void testTagsAsResources() {
 
         //Resource r1 = new Resource();



More information about the Registry-dev mailing list