[Registry-dev] svn commit r9939 - in trunk/registry/modules/core/src: main/java/org/wso2/registry main/java/org/wso2/registry/jdbc main/java/org/wso2/registry/jdbc/dao main/java/org/wso2/registry/jdbc/dataobjects main/java/org/wso2/registry/jdbc/queries main/java/org/wso2/registry/jdbc/urlhandlers main/resources/org/wso2/registry/i18n test/java/org/wso2/registry/jdbc

svn at wso2.org svn at wso2.org
Tue Nov 20 00:47:20 PST 2007


Author: chathura
Date: Tue Nov 20 00:46:41 2007
New Revision: 9939

Added:
   trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dataobjects/RatingDO.java
      - copied, changed from r9928, trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/Rating.java
   trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dataobjects/TaggingDO.java
Removed:
   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/DatabaseConstants.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/dao/TagsDAO.java
   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/urlhandlers/TagURLHandler.java
   trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/urlhandlers/URLHandlerManager.java
   trunk/registry/modules/core/src/main/resources/org/wso2/registry/i18n/resource.properties
   trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/JDBCRegistryTest.java
Log:

Implemented support for dynamic queries returning tags as search 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	Tue Nov 20 00:46:41 2007
@@ -63,7 +63,8 @@
     public static final String SQL_QUERY_MEDIA_TYPE = "sql-query";
     public static final String COMMENT_MEDIA_TYPE = "comment";    
     public static final String RATING_MEDIA_TYPE = "rating";
-    
+    public static final String TAG_MEDIA_TYPE = "tag";
+
     public static final String SYNPASE_REPOSITORY_MEDIA_TYPE = "synapse-repo";
     public static final String SYNAPSE_CONF_COLLECTION_MEDIA_TYPE = "synapse-conf";
     public static final String SYNAPSE_SEQUENCE_COLLECTION_MEDIA_TYPE = "synapse-seq";
@@ -78,5 +79,6 @@
     public static final String RESOURCES_RESULT_TYPE = "Resource";
     public static final String COMMENTS_RESULT_TYPE = "Comments";
     public static final String RATINGS_RESULT_TYPE = "Ratings";
+    public static final String TAGS_RESULT_TYPE = "Tags";
 
 }

Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/DatabaseConstants.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/DatabaseConstants.java	(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/DatabaseConstants.java	Tue Nov 20 00:46:41 2007
@@ -57,6 +57,10 @@
     public static final String TAG_ID_FIELD = "TAG_ID";
     public static final String TAG_NAME_FIELD = "TAG_NAME";
 
+    // Field names of Taggings table
+    public static final String TAGGED_TIME_FIELD = "TAGGED_TIME";
+    public static final String TAGGING_ID_FIELD = "TN_ID";
+
     // Field names of Comments table
     public static final String COMMENT_ID_FIELD = "CM_ID";
     public static final String COMMENT_TEXT_FIELD = "COMMENT_TEXT";

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	Tue Nov 20 00:46:41 2007
@@ -20,6 +20,7 @@
 package org.wso2.registry.jdbc.dao;
 
 import org.wso2.registry.jdbc.DatabaseConstants;
+import org.wso2.registry.jdbc.dataobjects.RatingDO;
 import org.wso2.registry.LogEntry;
 
 import java.sql.*;
@@ -164,7 +165,7 @@
         return userNames;
     }
 
-    public Rating getRating(long ratingID, Connection conn) throws SQLException {
+    public RatingDO 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=?";
 
@@ -177,14 +178,14 @@
             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));
+            RatingDO ratingDAO = new RatingDO();
+            ratingDAO.setRatedUserName(results.getString(DatabaseConstants.USER_ID_FIELD));
+            ratingDAO.setRatedTime(ratedTime);
+            ratingDAO.setRating(results.getInt(DatabaseConstants.RATING_FIELD));
+            ratingDAO.setResourcePath(results.getString(DatabaseConstants.PATH_FIELD));
+            ratingDAO.setResourceID(results.getLong(DatabaseConstants.AID_FIELD));
 
-            return rating;
+            return ratingDAO;
         }
 
         return null;

Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/TagsDAO.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/TagsDAO.java	(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/TagsDAO.java	Tue Nov 20 00:46:41 2007
@@ -23,10 +23,11 @@
 import org.wso2.registry.TaggedResourcePath;
 import org.wso2.registry.jdbc.DatabaseConstants;
 import org.wso2.registry.jdbc.dataobjects.TagDO;
+import org.wso2.registry.jdbc.dataobjects.TaggingDO;
 
 import java.sql.*;
-import java.util.ArrayList;
-import java.util.List;
+import java.sql.Date;
+import java.util.*;
 
 public class TagsDAO {
 
@@ -189,4 +190,63 @@
 
         return (Tag[]) tagList.toArray(new Tag[tagList.size()]);
     }
+
+    public TaggingDO getTagging(String path, String tagName, String userName, Connection conn)
+            throws SQLException {
+
+        ResourceDAO resourceDAO = new ResourceDAO();
+        long aid = resourceDAO.getArtifactID(path, conn);
+
+        String sql = "SELECT T.TAGGED_TIME FROM TAGGINGS T, TAGS TG, ARTIFACTS A WHERE A.AID=T.AID AND T.TAG_ID=TG.TAG_ID AND T.AID=? AND T.USER_ID=? AND TG.TAG_NAME=?";
+
+        PreparedStatement s = conn.prepareStatement(sql);
+        s.setLong(1, aid);
+        s.setString(2, userName);
+        s.setString(3, tagName);
+
+        ResultSet result = s.executeQuery();
+        if (result.next()) {
+
+            java.util.Date taggedTime = new java.util.Date(
+                    result.getTimestamp(DatabaseConstants.TAGGED_TIME_FIELD).getTime());
+
+            TaggingDO taggingDO = new TaggingDO();
+            taggingDO.setResourceID(aid);
+            taggingDO.setResourcePath(path);
+            taggingDO.setTagName(tagName);
+            taggingDO.setTaggedTime(taggedTime);
+            taggingDO.setTaggedUserName(userName);
+
+            return taggingDO;
+        }
+
+        return null;
+    }
+
+    public TaggingDO getTagging(long taggingID, Connection conn)
+            throws SQLException {
+
+        String sql = "SELECT A.AID, A.PATH, T.USER_ID, TG.TAG_NAME, T.TAGGED_TIME FROM TAGGINGS T, TAGS TG, ARTIFACTS A WHERE A.AID=T.AID AND T.TAG_ID=TG.TAG_ID AND T.TN_ID=?";
+
+        PreparedStatement s = conn.prepareStatement(sql);
+        s.setLong(1, taggingID);
+
+        ResultSet result = s.executeQuery();
+        if (result.next()) {
+
+            java.util.Date taggedTime = new java.util.Date(
+                    result.getTimestamp(DatabaseConstants.TAGGED_TIME_FIELD).getTime());
+
+            TaggingDO taggingDO = new TaggingDO();
+            taggingDO.setResourceID(result.getLong(DatabaseConstants.AID_FIELD));
+            taggingDO.setResourcePath(result.getString(DatabaseConstants.PATH_FIELD));
+            taggingDO.setTagName(result.getString(DatabaseConstants.TAG_NAME_FIELD));
+            taggingDO.setTaggedUserName(result.getString(DatabaseConstants.USER_ID_FIELD));
+            taggingDO.setTaggedTime(taggedTime);
+
+            return taggingDO;
+        }
+
+        return null;
+    }
 }

Copied: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dataobjects/RatingDO.java (from r9928, trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/Rating.java)
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/Rating.java	(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dataobjects/RatingDO.java	Tue Nov 20 00:46:41 2007
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package org.wso2.registry.jdbc.dao;
+package org.wso2.registry.jdbc.dataobjects;
 
 import java.util.Date;
 
-public class Rating {
+public class RatingDO {
 
     private long resourceID;
     private String resourcePath;

Added: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dataobjects/TaggingDO.java
==============================================================================
--- (empty file)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dataobjects/TaggingDO.java	Tue Nov 20 00:46:41 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.dataobjects;
+
+import java.util.Date;
+
+public class TaggingDO {
+
+    private long resourceID;
+    private String resourcePath;
+    private String taggedUserName;
+    private String tagName;
+    private Date taggedTime;
+
+    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 getTaggedUserName() {
+        return taggedUserName;
+    }
+
+    public void setTaggedUserName(String taggedUserName) {
+        this.taggedUserName = taggedUserName;
+    }
+
+    public String getTagName() {
+        return tagName;
+    }
+
+    public void setTagName(String tagName) {
+        this.tagName = tagName;
+    }
+
+    public Date getTaggedTime() {
+        return taggedTime;
+    }
+
+    public void setTaggedTime(Date taggedTime) {
+        this.taggedTime = taggedTime;
+    }
+}

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	Tue Nov 20 00:46:41 2007
@@ -22,8 +22,10 @@
 import org.wso2.registry.RegistryConstants;
 import org.wso2.registry.RegistryException;
 import org.wso2.registry.jdbc.DatabaseConstants;
+import org.wso2.registry.jdbc.dataobjects.RatingDO;
+import org.wso2.registry.jdbc.dataobjects.TaggingDO;
 import org.wso2.registry.jdbc.dao.RatingsDAO;
-import org.wso2.registry.jdbc.dao.Rating;
+import org.wso2.registry.jdbc.dao.TagsDAO;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -74,7 +76,7 @@
                 Resource ratingsCollection = fillRatingsCollection(results, conn);
                 return ratingsCollection;
 
-            }  else if (resultType.equals("Tags")) {
+            }  else if (resultType.equals(RegistryConstants.TAGS_RESULT_TYPE)) {
 
                 Resource tagsCollection = fillTagsCollection(results, conn);
                 return tagsCollection;
@@ -181,9 +183,9 @@
             long ratingID = results.getLong(DatabaseConstants.RATING_ID_FIELD);
 
             RatingsDAO ratingsDAO = new RatingsDAO();
-            Rating rating = ratingsDAO.getRating(ratingID, conn);
+            RatingDO ratingDAO = ratingsDAO.getRating(ratingID, conn);
 
-            String ratingPath = rating.getResourcePath() + ";ratings:" + rating.getRatedUserName();
+            String ratingPath = ratingDAO.getResourcePath() + ";ratings:" + ratingDAO.getRatedUserName();
             ratingPathList.add(ratingPath);
         }
 
@@ -199,36 +201,41 @@
 
     private Resource fillTagsCollection(ResultSet results, Connection conn) throws SQLException {
 
-        // URL for a tag /p1/r1?tag=java&user=xyz
+        // URL for a tag /p1/r1;tags:tagName:userName
 
         List tagPathList = new ArrayList();
         while (results.next()) {
 
-            String userName = results.getString(DatabaseConstants.USER_ID_FIELD);
-            long artifactID = results.getLong(DatabaseConstants.ARTIFACT_ID_FIELD);
-            long tagID = results.getLong(DatabaseConstants.TAG_ID_FIELD);
-
-            String artifactSQL = "SELECT PATH FROM ARTIFACTS WHERE AID=?";
-            PreparedStatement s1 = conn.prepareStatement(artifactSQL);
-            s1.setLong(1, artifactID);
-            ResultSet result1 = s1.executeQuery();
-
-            String taggedPath = "";
-            if (result1.next()) {
-                taggedPath = result1.getString(DatabaseConstants.PATH_FIELD);
-            }
+            long taggingID = results.getLong(DatabaseConstants.TAGGING_ID_FIELD);
 
-            String tagSQL = "SELECT TAG_NAME FROM TAGS WHERE TAG_ID=?";
-            PreparedStatement s2 = conn.prepareStatement(tagSQL);
-            s2.setLong(1, tagID);
-            ResultSet result2 = s2.executeQuery();
-
-            String tag = "";
-            if (result2.next()) {
-                tag = result2.getString(DatabaseConstants.TAG_NAME_FIELD);
-            }
+            TagsDAO tagsDAO = new TagsDAO();
+            TaggingDO taggingDO = tagsDAO.getTagging(taggingID, conn);
+
+            //String userName = results.getString(DatabaseConstants.USER_ID_FIELD);
+            //long artifactID = results.getLong(DatabaseConstants.ARTIFACT_ID_FIELD);
+            //long tagID = results.getLong(DatabaseConstants.TAG_ID_FIELD);
+            //
+            //String artifactSQL = "SELECT PATH FROM ARTIFACTS WHERE AID=?";
+            //PreparedStatement s1 = conn.prepareStatement(artifactSQL);
+            //s1.setLong(1, artifactID);
+            //ResultSet result1 = s1.executeQuery();
+            //
+            //String taggedPath = "";
+            //if (result1.next()) {
+            //    taggedPath = result1.getString(DatabaseConstants.PATH_FIELD);
+            //}
+            //
+            //String tagSQL = "SELECT TAG_NAME FROM TAGS WHERE TAG_ID=?";
+            //PreparedStatement s2 = conn.prepareStatement(tagSQL);
+            //s2.setLong(1, tagID);
+            //ResultSet result2 = s2.executeQuery();
+            //
+            //String tag = "";
+            //if (result2.next()) {
+            //    tag = result2.getString(DatabaseConstants.TAG_NAME_FIELD);
+            //}
 
-            String tagPath = taggedPath + "?tag=" + tag + "&user=" + userName;
+            String tagPath = taggingDO.getResourcePath() + ";tags:" + taggingDO.getTagName() + ":" + taggingDO.getTaggedUserName();
             tagPathList.add(tagPath);
         }
 

Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/urlhandlers/TagURLHandler.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/urlhandlers/TagURLHandler.java	(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/urlhandlers/TagURLHandler.java	Tue Nov 20 00:46:41 2007
@@ -18,7 +18,13 @@
 
 import org.wso2.registry.Resource;
 import org.wso2.registry.RegistryException;
+import org.wso2.registry.RegistryConstants;
 import org.wso2.registry.jdbc.ConnectionFactory;
+import org.wso2.registry.jdbc.dataobjects.TaggingDO;
+import org.wso2.registry.jdbc.dao.TagsDAO;
+
+import java.sql.Connection;
+import java.sql.SQLException;
 
 public class TagURLHandler extends URLHandler {
 
@@ -27,7 +33,7 @@
     }
 
     /**
-     * Accepts the URLs in the form <path>?tag=<tag-name>&user=<user-name>
+     * Accepts the URLs in the form <path>;tags:<tag-name>:<user-name>
      *
      * @param url
      * @param resource
@@ -36,7 +42,7 @@
      */
     public boolean handleURL(String url, Resource resource) throws RegistryException {
 
-        String[] parts = url.split("?");
+        String[] parts = url.split(";");
 
         if (parts.length != 2) {
             return false;
@@ -46,24 +52,40 @@
             return false;
         }
 
-        String[] queries = parts[1].split("&");
+        String[] queries = parts[1].split(":");
 
-        if (queries.length != 2) {
+        if (queries.length != 3) {
             return false;
         }
 
-        if (!queries[0].startsWith("tag=")) {
-            return false;
-        }
+        String resourcePath = parts[0];
+        String tagName = queries[1];
+        String userName = queries[2];
+
+        Connection conn = connectionFactory.getConnection();
+
+        try {
+            TagsDAO tagsDAO = new TagsDAO();
+            TaggingDO taggingDO = tagsDAO.getTagging(resourcePath, tagName, userName, conn);
+
+            resource.setMediaType(RegistryConstants.TAG_MEDIA_TYPE);
+            resource.setContent(taggingDO.getTagName());
+            resource.setAuthorUserName(taggingDO.getTaggedUserName());
+            resource.setCreatedTime(taggingDO.getTaggedTime());
+            resource.setProperty("resourcePath", taggingDO.getResourcePath());
+
+        } catch (SQLException e) {
+            String msg = "Could not get tagging. Caused by: " + e.getMessage();
+            throw new RegistryException(msg, e);
+
+        } finally {
+            try {
+                conn.close();
+            } catch (SQLException ignore) {
 
-        if (!queries[1].startsWith("user=")) {
-            return false;
+            }
         }
 
-        String tagName = queries[0].substring("tag=".length());
-        String userName = queries[0].substring("user=".length());
-
-        // todo: return the tag resource
-        return false;
+        return true;
     }
 }

Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/urlhandlers/URLHandlerManager.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/urlhandlers/URLHandlerManager.java	(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/urlhandlers/URLHandlerManager.java	Tue Nov 20 00:46:41 2007
@@ -34,6 +34,7 @@
         urlHandlers.add(new CommentCollectionURLHandler(connectionFactory));
         urlHandlers.add(new RatingURLHandler(connectionFactory));
         urlHandlers.add(new RatingsCollectionURLHandler(connectionFactory));
+        urlHandlers.add(new TagURLHandler(connectionFactory));
     }
 
     public Resource handleURL(String url)

Modified: trunk/registry/modules/core/src/main/resources/org/wso2/registry/i18n/resource.properties
==============================================================================
--- trunk/registry/modules/core/src/main/resources/org/wso2/registry/i18n/resource.properties	(original)
+++ trunk/registry/modules/core/src/main/resources/org/wso2/registry/i18n/resource.properties	Tue Nov 20 00:46:41 2007
@@ -61,7 +61,7 @@
 resource.comment.fail="Could not comment the resource {0} with comment {1}.
 get.comments.fail=Could not get the comments for the resource {0}.
 resource.rating.fail=Could not rate the resource {0}.
-get.average.rating.fail=Could not get the average rating for the resource {0}.
+get.average.rating.fail=Could not get the average ratingDAO for the resource {0}.
 define.query.fail=Could not define the query {0} with SQL: {1}.
 execute.query.fail=Failed to execute the predefined query {0}.
 resource.already.tagged=Resource {0} is already tagged with tag {1} by the user {2}.
\ No newline at end of file

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	Tue Nov 20 00:46:41 2007
@@ -670,6 +670,69 @@
         }
     }
 
+    public void testUserDefinedTagsQuery() {
+
+        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.applyTag("/c3/r1", "java");
+            registry.applyTag("/c3/r2", "jsp");
+            registry.applyTag("/c3/r3", "ajax");
+
+            String sql1 = "SELECT T.TN_ID FROM TAGGINGS T, ARTIFACTS A WHERE A.AID=T.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.TAGS_RESULT_TYPE);
+            registry.put("/qs/q3", q1);
+
+        } catch (RegistryException e) {
+            fail("Valid put resource scenarios failed.");
+        }
+
+        try {
+            Resource result1 = registry.executeQuery("/qs/q3", new String[] {"%production%"});
+
+            assertTrue("Search with result type tags should return a directory.",
+                    result1.isDirectory());
+
+            String[] tagPaths = (String[]) result1.getContent();
+            assertEquals("There should be two matching tags.", tagPaths.length, 2);
+
+            Resource tag1 = registry.get(tagPaths[0]);
+            assertEquals("First matching tag should be 'java'",
+                    (String)tag1.getContent(), "java");
+
+            Resource tag2 = registry.get(tagPaths[1]);
+            assertEquals("First matching tag should be 'jsp'",
+                    (String)tag2.getContent(), "jsp");
+
+        } catch (RegistryException e) {
+            fail("Failed to execute query.");
+        }
+    }
+
     public void testTagsAsResources() {
 
         //Resource r1 = new Resource();



More information about the Registry-dev mailing list