Browse Source

FIX Add filters to selectively retrieve queryset details
QuerySet detail code clean up

Signed-off-by: Stuart Ort <stuart.ort@lexisnexis.com>

Stuart Ort 13 years ago
parent
commit
ede39c6c1a
2 changed files with 137 additions and 24 deletions
  1. 10 1
      esp/scm/ws_workunits.ecm
  2. 127 23
      esp/services/ws_workunits/ws_workunitsQuerySets.cpp

+ 10 - 1
esp/scm/ws_workunits.ecm

@@ -529,7 +529,6 @@ SCMenum WUINFOType
     WURESULTS
 };
 
-
 ESPrequest WUInfoRequest
 {
     string Wuid;
@@ -1062,9 +1061,19 @@ ESPStruct QuerySetAlias
     string Name;
 };
 
+ESPenum WUQuerySetFilterType : string
+{
+    ALL("All"),
+    ID("Id"),
+    NAME("Name"),
+    ALIAS("Alias")
+};
+
 ESPrequest WUQuerySetDetailsRequest
 {
     string  QuerySetName;
+    string  Filter;
+    ESPenum WUQuerySetFilterType FilterType("All");
 };
 
 ESPresponse [exceptions_inline] WUQuerySetDetailsResponse

+ 127 - 23
esp/services/ws_workunits/ws_workunitsQuerySets.cpp

@@ -172,6 +172,105 @@ void copyWULogicalFilesToTarget(IEspContext &context, IConstWUClusterInfo &clust
     }
 }
 
+void gatherQuerySetQueryDetails(IPropertyTree *query, IEspQuerySetQuery *queryInfo)
+{
+    queryInfo->setId(query->queryProp("@id"));
+    queryInfo->setName(query->queryProp("@name"));
+    queryInfo->setDll(query->queryProp("@dll"));
+    queryInfo->setWuid(query->queryProp("@wuid"));
+    queryInfo->setSuspended(query->getPropBool("@suspended", false));
+}
+
+void gatherQuerySetAliasDetails(IPropertyTree *alias, IEspQuerySetAlias *aliasInfo)
+{
+    aliasInfo->setName(alias->queryProp("@name"));
+    aliasInfo->setId(alias->queryProp("@id"));
+}
+
+void retrieveAllQuerysetDetails(IPropertyTree *registry, IEspWUQuerySetDetailsResponse &resp)
+{
+    IArrayOf<IEspQuerySetQuery> querySetQueries;
+    Owned<IPropertyTreeIterator> queries = registry->getElements("Query");
+    ForEach(*queries)
+    {
+        IPropertyTree &query = queries->query();
+        Owned<IEspQuerySetQuery> q = createQuerySetQuery("", "");
+        gatherQuerySetQueryDetails(&query, q);
+        querySetQueries.append(*q.getClear());
+    }
+    resp.setQuerysetQueries(querySetQueries);
+
+    IArrayOf<IEspQuerySetAlias> querySetAliases;
+    Owned<IPropertyTreeIterator> aliases = registry->getElements("Alias");
+    ForEach(*aliases)
+    {
+        IPropertyTree &alias = aliases->query();
+        Owned<IEspQuerySetAlias> a = createQuerySetAlias("", "");
+        gatherQuerySetAliasDetails(&alias, a);
+        querySetAliases.append(*a.getClear());
+    }
+}
+
+void retrieveQuerysetDetailsFromAlias(IPropertyTree *registry, const char *filter, IEspWUQuerySetDetailsResponse &resp)
+{
+    StringBuffer xpath;
+    xpath.append("Alias[@name='").append(filter).append("']");
+    IPropertyTree *alias = registry->queryPropTree(xpath);
+    if (!alias)
+    {
+        DBGLOG("Alias %s not found", filter);
+        return;
+    }
+
+    IArrayOf<IEspQuerySetAlias> querySetAliases;
+    Owned<IEspQuerySetAlias> a = createQuerySetAlias("", "");
+    gatherQuerySetAliasDetails(alias, a);
+    querySetAliases.append(*a.getClear());
+
+    xpath.clear().append("Query[@id='").append(a->getId()).append("']");
+    IPropertyTree *query = registry->queryPropTree(xpath);
+    if (!query)
+    {
+        DBGLOG("No matching Query %s found for Alias %s", a->getId(), filter);
+        return;
+    }
+
+    IArrayOf<IEspQuerySetQuery> querySetQueries;
+    Owned<IEspQuerySetQuery> q = createQuerySetQuery("", "");
+    gatherQuerySetQueryDetails(query, q);
+    querySetQueries.append(*q.getClear());
+    resp.setQuerysetQueries(querySetQueries);
+}
+
+void retrieveQuerysetDetailsFromQuery(IPropertyTree *registry, const char *filter, const char *filterType, IEspWUQuerySetDetailsResponse &resp)
+{
+    StringBuffer xpath;
+    xpath.clear().append("Query[@").append(filterType).append("='").append(filter).append("']");
+    IPropertyTree *query = registry->queryPropTree(xpath);
+    if (!query)
+    {
+        DBGLOG("No matching Query %s found for %s", filter, filterType);
+        return;
+    }
+
+    IArrayOf<IEspQuerySetQuery> querySetQueries;
+    Owned<IEspQuerySetQuery> q = createQuerySetQuery("", "");
+    gatherQuerySetQueryDetails(query, q);
+    querySetQueries.append(*q.getClear());
+    resp.setQuerysetQueries(querySetQueries);
+
+    IArrayOf<IEspQuerySetAlias> querySetAliases;
+    xpath.clear().append("Alias[@id='").append(q->getId()).append("']");
+    Owned<IPropertyTreeIterator> aliases = registry->getElements(xpath.str());
+    ForEach(*aliases)
+    {
+        IPropertyTree &alias = aliases->query();
+        Owned<IEspQuerySetAlias> a = createQuerySetAlias("", "");
+        gatherQuerySetAliasDetails(&alias, a);
+        querySetAliases.append(*a.getClear());
+    }
+}
+
 bool CWsWorkunitsEx::onWUCopyLogicalFiles(IEspContext &context, IEspWUCopyLogicalFilesRequest &req, IEspWUCopyLogicalFilesResponse &resp)
 {
     if (isEmpty(req.getWuid()))
@@ -283,33 +382,38 @@ bool CWsWorkunitsEx::onWUQuerysetDetails(IEspContext &context, IEspWUQuerySetDet
     if (!registry)
         return false;
 
-    IArrayOf<IEspQuerySetQuery> querySetQueries;
-    Owned<IPropertyTreeIterator> queries = registry->getElements("Query");
-    ForEach(*queries)
+    const char *filterType = req.getFilterTypeAsString();
+    if (strieq(filterType, "All"))
+        retrieveAllQuerysetDetails(registry, resp);
+    else if (strieq(filterType, "Alias"))
     {
-        IPropertyTree &query = queries->query();
-        Owned<IEspQuerySetQuery> q = createQuerySetQuery("", "");
-        q->setId(query.queryProp("@id"));
-        q->setName(query.queryProp("@name"));
-        q->setDll(query.queryProp("@dll"));
-        q->setWuid(query.queryProp("@wuid"));
-        q->setSuspended(query.getPropBool("@suspended", false));
-        querySetQueries.append(*q.getLink());
-
+        const char *filter = req.getFilter();
+        if (!filter || !*filter)
+        {
+            DBGLOG("Need to specify an Alias name for lookup");
+            return false;
+        }
+        retrieveQuerysetDetailsFromAlias(registry, filter, resp);
     }
-    resp.setQuerysetQueries(querySetQueries);
-
-    IArrayOf<IEspQuerySetAlias> querySetAliases;
-    Owned<IPropertyTreeIterator> aliases = registry->getElements("Alias");
-    ForEach(*aliases)
+    else
     {
-        IPropertyTree &alias = aliases->query();
-        Owned<IEspQuerySetAlias> a = createQuerySetAlias("", "");
-        a->setName(alias.queryProp("@name"));
-        a->setId(alias.queryProp("@id"));
-        querySetAliases.append(*a.getClear());
+        const char *filter = req.getFilter();
+        if (!filter || !*filter)
+        {
+            DBGLOG("Need to specify an Alias name for lookup");
+            return false;
+        }
+        if (strieq(filterType, "Id"))
+            retrieveQuerysetDetailsFromQuery(registry, filter, "id", resp);
+        else if (strieq(filterType, "Name"))
+            retrieveQuerysetDetailsFromQuery(registry, filter, "name", resp);
+        else
+        {
+            DBGLOG("invalid filterType %s specified", filter);
+            return false;
+        }
+
     }
-    resp.setQuerysetAliases(querySetAliases);
     return true;
 }