[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