Author: chathura
Date: Thu Dec 13 10:01:11 2007
New Revision: 11097

Log:


Implemented the improved advanced search mechanism for the UI back end.



Removed:
   
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/utils/QueryManager.java
Modified:
   
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/ControllerServlet.java
   
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/AdvancedSearchAction.java
   
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/utils/AdvancedResourceQuery.java
   trunk/registry/modules/webapps/src/main/webapp/admin/advanced-search.jsp

Modified: 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/ControllerServlet.java
==============================================================================
--- 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/ControllerServlet.java
   (original)
+++ 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/ControllerServlet.java
   Thu Dec 13 10:01:11 2007
@@ -783,6 +783,10 @@
         
advancedSearchAction.setResourcePath(request.getParameter("resourcePath"));
         advancedSearchAction.setAuthorName(request.getParameter("author"));
         advancedSearchAction.setUpdaterName(request.getParameter("updater"));
+        
advancedSearchAction.setCreatedAfter(request.getParameter("createdAfter"));
+        
advancedSearchAction.setCreatedBefore(request.getParameter("createdBefore"));
+        
advancedSearchAction.setUpdatedAfter(request.getParameter("updatedAfter"));
+        
advancedSearchAction.setUpdatedBefore(request.getParameter("updatedBefore"));
         advancedSearchAction.setTags(request.getParameter("tags"));
         
advancedSearchAction.setCommentWords(request.getParameter("commentWords"));
 

Modified: 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/AdvancedSearchAction.java
==============================================================================
--- 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/AdvancedSearchAction.java
        (original)
+++ 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/AdvancedSearchAction.java
        Thu Dec 13 10:01:11 2007
@@ -19,19 +19,20 @@
 import org.wso2.registry.*;
 import org.wso2.registry.web.actions.utils.ResourceData;
 import org.wso2.registry.web.actions.utils.AdvancedResourceQuery;
-import org.wso2.registry.secure.SecureRegistry;
-import org.wso2.registry.secure.RegistryUserManager;
 import org.wso2.registry.secure.AuthorizationFailedException;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-import java.util.ArrayList;
+import java.util.*;
 
 public class AdvancedSearchAction extends AbstractRegistryAction {
 
     private String resourcePath;
     private String authorName;
     private String updaterName;
+    private String createdAfter;
+    private String createdBefore;
+    private String updatedAfter;
+    private String updatedBefore;
     private String tags;
     private String commentWords;
     private String content;
@@ -48,9 +49,13 @@
         if (resultType.equals("Resources")) {
 
             AdvancedResourceQuery query = new AdvancedResourceQuery();
-            query.setResourcePath(resourcePath);
+            query.setResourceName(resourcePath);
             query.setAuthorName(authorName);
             query.setUpdaterName(updaterName);
+            query.setCreatedAfter(computeDate(createdAfter));
+            query.setCreatedBefore(computeDate(createdBefore));
+            query.setUpdatedAfter(computeDate(updatedAfter));
+            query.setUpdatedBefore(computeDate(updatedBefore));
             query.setCommentWords(commentWords);
             query.setTags(tags);
 
@@ -235,6 +240,38 @@
         this.updaterName = updaterName;
     }
 
+    public String getCreatedAfter() {
+        return createdAfter;
+    }
+
+    public void setCreatedAfter(String createdAfter) {
+        this.createdAfter = createdAfter;
+    }
+
+    public String getCreatedBefore() {
+        return createdBefore;
+    }
+
+    public void setCreatedBefore(String createdBefore) {
+        this.createdBefore = createdBefore;
+    }
+
+    public String getUpdatedAfter() {
+        return updatedAfter;
+    }
+
+    public void setUpdatedAfter(String updatedAfter) {
+        this.updatedAfter = updatedAfter;
+    }
+
+    public String getUpdatedBefore() {
+        return updatedBefore;
+    }
+
+    public void setUpdatedBefore(String updatedBefore) {
+        this.updatedBefore = updatedBefore;
+    }
+
     public String getTags() {
         return tags;
     }
@@ -274,4 +311,48 @@
     public void setResourceDataList(List resourceDataList) {
         this.resourceDataList = resourceDataList;
     }
+
+    /**
+     * Converts given strings to Dates
+     *
+     * @param dateString Allowed formats
+     * year/month/day:hour/minute/second
+     * year/month/day
+     *
+     * @return Date corresponding to the given string date
+     */
+    private Date computeDate(String dateString) {
+
+        if (dateString == null || dateString.length() == 0) {
+            return null;
+        }
+
+        if (dateString.indexOf(":") > 0) {
+            String[] dateTime = dateString.split(":");
+            if (dateTime.length == 2) {
+                String[] dateParts = dateTime[0].split("/");
+                String[] timeParts = dateTime[1].split("/");
+                Calendar calendar = new GregorianCalendar(
+                        Integer.parseInt(dateParts[0]),
+                        Integer.parseInt(dateParts[1]) - 1, // month value is 
zero based
+                        Integer.parseInt(dateParts[2]),
+                        Integer.parseInt(timeParts[0]),
+                        Integer.parseInt(timeParts[1]),
+                        Integer.parseInt(timeParts[2]));
+
+                return calendar.getTime();
+            }
+        } else {
+
+            String[] dateParts = dateString.split("/");
+            Calendar calendar = new GregorianCalendar(
+                    Integer.parseInt(dateParts[0]),
+                    Integer.parseInt(dateParts[1]),
+                    Integer.parseInt(dateParts[2]));
+
+            return calendar.getTime();
+        }
+        
+        return null;
+    }
 }

Modified: 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/utils/AdvancedResourceQuery.java
==============================================================================
--- 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/utils/AdvancedResourceQuery.java
 (original)
+++ 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/utils/AdvancedResourceQuery.java
 Thu Dec 13 10:01:11 2007
@@ -22,10 +22,10 @@
 import org.wso2.registry.RegistryConstants;
 import org.wso2.registry.secure.SecureRegistry;
 
-import java.util.Map;
-import java.util.HashMap;
 import java.util.List;
 import java.util.ArrayList;
+import java.util.Date;
+import java.sql.Timestamp;
 
 /**
  * Represents an advanced query on normal resources. Handles all details of 
defining, executing and
@@ -37,9 +37,13 @@
      * List of parameters for the query. NOTE THAT THIS LIST SHOULD ALWAYS BE 
PROCESSED IN THE ORDER
      * THEY ARE LISTED BELOW.
      */
-    private String resourcePath;
+    private String resourceName;
     private String authorName;
     private String updaterName;
+    private Date createdAfter;
+    private Date createdBefore;
+    private Date updatedAfter;
+    private Date updatedBefore;
     private String commentWords;
     private String tag1;
     private String tag2;
@@ -60,8 +64,8 @@
         }
 
         List params = new ArrayList();
-        if (resourcePath != null && resourcePath.length() > 0) {
-            params.add(resourcePath);
+        if (resourceName != null && resourceName.length() > 0) {
+            params.add("%/" + resourceName);
         }
 
         if (authorName != null && authorName.length() > 0) {
@@ -72,6 +76,22 @@
             params.add(updaterName);
         }
 
+        if (createdAfter != null) {
+            params.add(new Timestamp(createdAfter.getTime()));
+        }
+
+        if (createdBefore != null) {
+            params.add(new Timestamp(createdBefore.getTime()));
+        }
+
+        if (updatedAfter != null) {
+            params.add(new Timestamp(updatedAfter.getTime()));
+        }
+
+        if (updatedBefore != null) {
+            params.add(new Timestamp(updatedBefore.getTime()));
+        }
+
         if (commentWords != null && commentWords.length() > 0) {
             params.add("%" + commentWords + "%");
         }
@@ -92,12 +112,12 @@
         return resultCollection;
     }
 
-    public String getResourcePath() {
-        return resourcePath;
+    public String getResourceName() {
+        return resourceName;
     }
 
-    public void setResourcePath(String resourcePath) {
-        this.resourcePath = resourcePath;
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
     }
 
     public String getAuthorName() {
@@ -116,6 +136,38 @@
         this.updaterName = updaterName;
     }
 
+    public Date getCreatedAfter() {
+        return createdAfter;
+    }
+
+    public void setCreatedAfter(Date createdAfter) {
+        this.createdAfter = createdAfter;
+    }
+
+    public Date getCreatedBefore() {
+        return createdBefore;
+    }
+
+    public void setCreatedBefore(Date createdBefore) {
+        this.createdBefore = createdBefore;
+    }
+
+    public Date getUpdatedAfter() {
+        return updatedAfter;
+    }
+
+    public void setUpdatedAfter(Date updatedAfter) {
+        this.updatedAfter = updatedAfter;
+    }
+
+    public Date getUpdatedBefore() {
+        return updatedBefore;
+    }
+
+    public void setUpdatedBefore(Date updatedBefore) {
+        this.updatedBefore = updatedBefore;
+    }
+
     public String getTags() {
         return tags;
     }
@@ -167,7 +219,7 @@
 
             StringBuffer buf = new StringBuffer("/queries/advanced");
 
-            if (resourcePath != null && resourcePath.length() > 0) {
+            if (resourceName != null && resourceName.length() > 0) {
                 buf.append("1");
             } else {
                 buf.append("0");
@@ -185,6 +237,30 @@
                 buf.append("0");
             }
 
+            if (createdAfter != null) {
+                buf.append("1");
+            } else {
+                buf.append("0");
+            }
+
+            if (createdBefore != null) {
+                buf.append("1");
+            } else {
+                buf.append("0");
+            }
+
+            if (updatedAfter != null) {
+                buf.append("1");
+            } else {
+                buf.append("0");
+            }
+
+            if (updatedBefore != null) {
+                buf.append("1");
+            } else {
+                buf.append("0");
+            }
+
             if (commentWords != null && commentWords.length() > 0) {
                 buf.append("1");
             } else {
@@ -220,8 +296,8 @@
         boolean queryStarted = false;
 
         String pathQuery = "";
-        if (resourcePath != null && resourcePath.length() != 0) {
-            pathQuery = " WHERE R.PATH=?";
+        if (resourceName != null && resourceName.length() != 0) {
+            pathQuery = " WHERE R.PATH LIKE ?";
             queryStarted = true;
         }
 
@@ -237,13 +313,79 @@
 
         //String sql = "SELECT A.AID FROM ARTIFACTS A, VERSIONS V, TAGS T, 
COMMENTS C WHERE A.AID=V.AID AND V.VN IN (SELECT MAX(V2.VN) FROM VERSIONS V2 
WHERE A.AID=V2.AID) AND A.AID=T.AID AND A.AID=C.AID AND A.PATH='c1200/r4'";
         String fromVersions = "";
-        String versionQuery = "";
+        String updaterNameQuery = "";
         if (updaterName != null && updaterName.length() != 0) {
             fromVersions = ", VERSIONS V";
             if (queryStarted) {
-                versionQuery = " AND V.AID=R.AID AND V.VN IN (SELECT 
MAX(V2.VN) FROM VERSIONS V2 WHERE R.AID=V2.AID) AND V.AUTHOR=?";
+                updaterNameQuery = " AND V.AID=R.AID AND V.VN IN (SELECT 
MAX(V2.VN) FROM VERSIONS V2 WHERE R.AID=V2.AID) AND V.AUTHOR=?";
+            } else {
+                updaterNameQuery = " WHERE V.AID=R.AID AND V.VN IN (SELECT 
MAX(V2.VN) FROM VERSIONS V2 WHERE R.AID=V2.AID) AND V.AUTHOR=?";
+            }
+        }
+
+        String createdAfterQuery = "";
+        if (createdAfter != null) {
+            if (queryStarted) {
+                createdAfterQuery = " AND R.CREATED_TIME>?";
+            } else {
+                createdAfterQuery = " WHERE R.CREATED_TIME>?";
+                queryStarted = true;
+            }
+        }
+
+        String createdBeforeQuery = "";
+        if (createdBefore != null) {
+            if (queryStarted) {
+                createdBeforeQuery = " AND R.CREATED_TIME<?";
             } else {
-                versionQuery = " WHERE V.AID=R.AID AND V.VN IN (SELECT 
MAX(V2.VN) FROM VERSIONS V2 WHERE R.AID=V2.AID) AND V.AUTHOR=?";
+                createdBeforeQuery = " WHERE R.CREATED_TIME<?";
+                queryStarted = true;
+            }
+        }
+
+        String updatedAfterQuery = "";
+        if (updatedAfter != null) {
+            if (fromVersions.equals("")) {
+                fromVersions = ", VERSIONS V";
+
+                if (queryStarted) {
+                    updatedAfterQuery = " AND V.AID=R.AID AND V.VN IN (SELECT 
MAX(V2.VN) FROM VERSIONS V2 WHERE R.AID=V2.AID) AND V.UPDATED_TIME>?";
+                } else {
+                    updatedAfterQuery = " WHERE V.AID=R.AID AND V.VN IN 
(SELECT MAX(V2.VN) FROM VERSIONS V2 WHERE R.AID=V2.AID) AND V.UPDATED_TIME>?";
+                    queryStarted = true;
+                }
+
+            } else {
+
+                if (queryStarted) {
+                    updatedAfterQuery = " AND V.UPDATED_TIME>?";
+                } else {
+                    updatedAfterQuery = " WHERE V.UPDATED_TIME>?";
+                    queryStarted = true;
+                }
+            }
+        }
+
+        String updatedBeforeQuery = "";
+        if (updatedBefore != null) {
+            if (fromVersions.equals("")) {
+                fromVersions = ", VERSIONS V";
+
+                if (queryStarted) {
+                    updatedBeforeQuery = " AND V.AID=R.AID AND V.VN IN (SELECT 
MAX(V2.VN) FROM VERSIONS V2 WHERE R.AID=V2.AID) AND V.UPDATED_TIME<?";
+                } else {
+                    updatedBeforeQuery = " WHERE V.AID=R.AID AND V.VN IN 
(SELECT MAX(V2.VN) FROM VERSIONS V2 WHERE R.AID=V2.AID) AND V.UPDATED_TIME<?";
+                    queryStarted = true;
+                }
+
+            } else {
+
+                if (queryStarted) {
+                    updatedBeforeQuery = " AND V.UPDATED_TIME<?";
+                } else {
+                    updatedBeforeQuery = " WHERE V.UPDATED_TIME<?";
+                    queryStarted = true;
+                }
             }
         }
 
@@ -282,7 +424,7 @@
             }
         }
 
-        String sql = "SELECT R.PATH FROM ARTIFACTS R" + fromVersions + 
fromComments + fromTags + pathQuery + authorQuery + versionQuery + 
commentsQuery + tagsQuery;
+        String sql = "SELECT R.PATH FROM ARTIFACTS R" + fromVersions + 
fromComments + fromTags + pathQuery + authorQuery + updaterNameQuery + 
createdAfterQuery + createdBeforeQuery + updatedAfterQuery + updatedBeforeQuery 
+ commentsQuery + tagsQuery;
 
         return sql;
     }

Modified: 
trunk/registry/modules/webapps/src/main/webapp/admin/advanced-search.jsp
==============================================================================
--- trunk/registry/modules/webapps/src/main/webapp/admin/advanced-search.jsp    
(original)
+++ trunk/registry/modules/webapps/src/main/webapp/admin/advanced-search.jsp    
Thu Dec 13 10:01:11 2007
@@ -61,15 +61,23 @@
                                                                </td>
                        
                                                        </tr>
-                                                       <tr>
+                            <tr>
                                                                <td>Date</td>
                                                                <td>
-                                                                       <div 
style="width:200px;">Only find results updated</div>
-                                                                       From: 
<input type="text" name="fromDate" value="" id="#_fromDate" 
style="width:100px;"/>
+                                                                       <div 
style="width:200px;">Only find resource created</div>
+                                                                       From: 
<input type="text" name="createdAfter" value="" id="#_cfromDate" 
style="width:100px;"/>
                        
-                                                                       To: 
<input type="text" name="toDate" value="" id="#_toDate" style="width:100px;"/>
+                                                                       To: 
<input type="text" name="createdBefore" value="" id="#_ctoDate" 
style="width:100px;"/>
+                                                               </td>
+
+                                                       </tr>
+                            <tr>
+                                                               <td>Date</td>
+                                                               <td>
+                                                                       <div 
style="width:200px;">Only find resources updated</div>
+                                                                       From: 
<input type="text" name="updatedAfter" value="" id="#_ufromDate" 
style="width:100px;"/>
                        
-                                                               
+                                                                       To: 
<input type="text" name="updatedBefore" value="" id="#_utoDate" 
style="width:100px;"/>
                                                                </td>
                                                                
                                                        </tr>

_______________________________________________
Registry-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/registry-dev

Reply via email to