You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by jf...@apache.org on 2008/12/17 02:53:32 UTC
svn commit: r727243 - in
/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi:
api/impl/ model/ query/
Author: jfaath
Date: Tue Dec 16 17:53:32 2008
New Revision: 727243
URL: http://svn.apache.org/viewvc?rev=727243&view=rev
Log:
JUDDI-159: adding searching by categories. This does not complete this issue - searching by category groups must still be done.
Added:
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByCategoryQuery.java (with props)
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByCategoryQuery.java (with props)
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByCategoryQuery.java (with props)
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByCategoryQuery.java (with props)
Modified:
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BindingCategoryBag.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessCategoryBag.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OperationalInfo.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceCategoryBag.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelCategoryBag.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByCategoryQuery.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByTModelKeyQuery.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java
webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByTModelKeyQuery.java
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIInquiryImpl.java Tue Dec 16 17:53:32 2008
@@ -28,13 +28,17 @@
import org.apache.juddi.query.FetchBusinessEntitiesQuery;
import org.apache.juddi.query.FetchBusinessServicesQuery;
import org.apache.juddi.query.FetchTModelsQuery;
+import org.apache.juddi.query.FindBindingByCategoryQuery;
import org.apache.juddi.query.FindBindingByTModelKeyQuery;
+import org.apache.juddi.query.FindBusinessByCategoryQuery;
import org.apache.juddi.query.FindBusinessByDiscoveryURLQuery;
import org.apache.juddi.query.FindBusinessByIdentifierQuery;
import org.apache.juddi.query.FindBusinessByNameQuery;
import org.apache.juddi.query.FindBusinessByTModelKeyQuery;
+import org.apache.juddi.query.FindServiceByCategoryQuery;
import org.apache.juddi.query.FindServiceByNameQuery;
import org.apache.juddi.query.FindServiceByTModelKeyQuery;
+import org.apache.juddi.query.FindTModelByCategoryQuery;
import org.apache.juddi.query.FindTModelByIdentifierQuery;
import org.apache.juddi.query.FindTModelByNameQuery;
import org.apache.juddi.query.PersistenceManager;
@@ -100,7 +104,7 @@
doFindTModelEmbeddedSearch(em, body.getFindQualifiers(), body.getFindTModel(), body.getTModelBag());
keysFound = FindBindingByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), body.getServiceKey(), keysFound);
- //keysFound = FindBindingByCategoryQuery.select(em, findQualifiers, tmodelKeys, body.getServiceKey(), keysFound);
+ keysFound = FindBindingByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getServiceKey(), keysFound);
BindingDetail result = new BindingDetail();
ListDescription listDesc = new ListDescription();
@@ -171,7 +175,7 @@
keysFound = FindBusinessByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), keysFound);
keysFound = FindBusinessByIdentifierQuery.select(em, findQualifiers, body.getIdentifierBag(), keysFound);
keysFound = FindBusinessByDiscoveryURLQuery.select(em, findQualifiers, body.getDiscoveryURLs(), keysFound);
- //keysFound = FindBusinessByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
+ keysFound = FindBusinessByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
keysFound = FindBusinessByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
BusinessList result = new BusinessList();
@@ -322,7 +326,7 @@
List<?> keysFound = null;
FindServiceByTModelKeyQuery.select(em, findQualifiers, body.getTModelBag(), body.getBusinessKey(), keysFound);
- //keysFound = FindServiceByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey, keysFound);
+ keysFound = FindServiceByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), body.getBusinessKey(), keysFound);
keysFound = FindServiceByNameQuery.select(em, findQualifiers, body.getName(), body.getBusinessKey(), keysFound);
ServiceList result = new ServiceList();
@@ -366,7 +370,7 @@
List<?> keysFound = null;
keysFound = FindTModelByIdentifierQuery.select(em, findQualifiers, body.getIdentifierBag(), keysFound);
- //keysFound = FindTModelByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
+ keysFound = FindTModelByCategoryQuery.select(em, findQualifiers, body.getCategoryBag(), keysFound);
keysFound = FindTModelByNameQuery.select(em, findQualifiers, body.getName(), keysFound);
TModelList result = new TModelList();
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BindingCategoryBag.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BindingCategoryBag.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BindingCategoryBag.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BindingCategoryBag.java Tue Dec 16 17:53:32 2008
@@ -41,7 +41,7 @@
}
@OneToOne(optional=false, fetch = FetchType.LAZY)
- @JoinColumn(name = "binding_template_id")
+ @JoinColumn(name = "entity_key")
public BindingTemplate getBindingTemplate() {
return bindingTemplate;
}
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessCategoryBag.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessCategoryBag.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessCategoryBag.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/BusinessCategoryBag.java Tue Dec 16 17:53:32 2008
@@ -41,7 +41,7 @@
}
@OneToOne(optional=false, fetch = FetchType.LAZY)
- @JoinColumn(name = "business_entity_id")
+ @JoinColumn(name = "entity_key")
public BusinessEntity getBusinessEntity() {
return businessEntity;
}
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OperationalInfo.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OperationalInfo.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OperationalInfo.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/OperationalInfo.java Tue Dec 16 17:53:32 2008
@@ -90,7 +90,7 @@
this.modifiedIncludingChildren = modifiedIncludingChildren;
}
- @Column(name = "key_id", nullable = false, length = 255)
+ @Column(name = "node_id", nullable = false, length = 255)
public String getNodeId() {
return nodeId;
}
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceCategoryBag.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceCategoryBag.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceCategoryBag.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/ServiceCategoryBag.java Tue Dec 16 17:53:32 2008
@@ -41,7 +41,7 @@
}
@OneToOne(optional=false, fetch = FetchType.LAZY)
- @JoinColumn(name = "business_service_id")
+ @JoinColumn(name = "entity_key")
public BusinessService getBusinessService() {
return businessService;
}
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelCategoryBag.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelCategoryBag.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelCategoryBag.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/model/TmodelCategoryBag.java Tue Dec 16 17:53:32 2008
@@ -39,7 +39,7 @@
}
@OneToOne(optional=false, fetch = FetchType.LAZY)
- @JoinColumn(name = "tmodel_id")
+ @JoinColumn(name = "entity_key")
public Tmodel getTmodel() {
return tmodel;
}
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/EntityQuery.java Tue Dec 16 17:53:32 2008
@@ -41,11 +41,12 @@
public static final int DEFAULT_MAXROWS = 100;
public static final int DEFAULT_MAXINCLAUSE = 1000;
+ // TODO: make this alias creator a little more unique
public static String buildAlias(String entityName) {
if (entityName == null || entityName.length() == 0)
return "x";
- return entityName.substring(0, entityName.length() - 3);
+ return entityName.substring(0, entityName.length() - 3) + "_";
}
/*
Added: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByCategoryQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByCategoryQuery.java?rev=727243&view=auto
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByCategoryQuery.java (added)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByCategoryQuery.java Tue Dec 16 17:53:32 2008
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * 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.apache.juddi.query;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.uddi.api_v3.CategoryBag;
+
+/**
+ * Returns the list of binding keys possessing the keyedReferences in the passed category bag.
+ * Output is restricted by list of binding keys passed in. If null, all binding templates are searched.
+ * Output is produced by building the appropriate JPA query based on input and find qualifiers.
+ *
+ * From specification:
+ * "This optional argument is a list of category references in the form of keyedReference elements and keyedReferenceGroup
+ * structures. When used, the returned bindingDetail for this API will contain elements matching all of the categories
+ * passed (logical AND by default). Specifying the appropriate findQualifiers can override this behavior."
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+public class FindBindingByCategoryQuery {
+
+ private static final String ENTITY_NAME_CHILD = "BindingCategoryBag";
+
+ private static FindEntityByCategoryQuery findQuery;
+
+ static {
+ findQuery = new FindEntityByCategoryQuery(BindingTemplateQuery.ENTITY_NAME,
+ BindingTemplateQuery.ENTITY_ALIAS,
+ BindingTemplateQuery.KEY_NAME,
+ BindingTemplateQuery.ENTITY_FIELD,
+ ENTITY_NAME_CHILD);
+ }
+
+ public static List<?> select(EntityManager em, FindQualifiers fq, CategoryBag categoryBag, String parentKey, List<?> keysIn) {
+ if (parentKey != null && parentKey.length() > 0) {
+ DynamicQuery.Parameter param = new DynamicQuery.Parameter(BindingTemplateQuery.ENTITY_ALIAS + "." + BindingTemplateQuery.KEY_NAME_PARENT, parentKey, DynamicQuery.PREDICATE_EQUALS);
+ return findQuery.select(em, fq, categoryBag, keysIn, param);
+ }
+ else
+ return findQuery.select(em, fq, categoryBag, keysIn);
+ }
+}
Propchange: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBindingByCategoryQuery.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByCategoryQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByCategoryQuery.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByCategoryQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByCategoryQuery.java Tue Dec 16 17:53:32 2008
@@ -18,125 +18,39 @@
package org.apache.juddi.query;
import java.util.List;
+
import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.xml.bind.JAXBElement;
-import org.apache.juddi.config.Constants;
-import org.apache.juddi.query.util.DynamicQuery;
import org.apache.juddi.query.util.FindQualifiers;
import org.uddi.api_v3.CategoryBag;
-import org.uddi.api_v3.KeyedReference;
-import org.uddi.api_v3.KeyedReferenceGroup;
/**
+ * Returns the list of business keys possessing the keyedReferences in the passed category bag.
+ * Output is restricted by list of business keys passed in. If null, all business entities are searched.
+ * Output is produced by building the appropriate JPA query based on input and find qualifiers.
+ *
+ * From specification:
+ * "This is a list of category references in the form of keyedReference elements and keyedReferenceGroup
+ * structures. The returned businessList contains businessInfo elements matching all of the categories
+ * passed (logical AND by default). Specifying the appropriate findQualifiers can override this behavior."
+ *
* @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
*/
public class FindBusinessByCategoryQuery {
- private static String selectSQL;
+ private static final String ENTITY_NAME_CHILD = "BusinessCategoryBag";
- static {
- StringBuffer sql = new StringBuffer(200);
- sql.append("select bc.id.businessKey from BusinessCategory bc ");
- selectSQL = sql.toString();
- }
-
- public static List<?> select(FindQualifiers fq, CategoryBag categories, List<Object> keysIn, EntityManager em) {
- // If keysIn is not null and empty, then search is over.
- if ((keysIn != null) && (keysIn.size() == 0))
- return keysIn;
-
- if (categories == null)
- return keysIn;
-
- List<JAXBElement<?>> catElems = categories.getContent();
- if (catElems == null || catElems.size() == 0)
- return keysIn;
-
- DynamicQuery dynamicQry = new DynamicQuery(selectSQL);
- appendConditions(dynamicQry, fq, catElems, keysIn);
-
- System.out.println(dynamicQry);
-
- Query qry = dynamicQry.buildJPAQuery(em);
- List<?> result = qry.getResultList();
-
- return result;
- }
+ private static FindEntityByCategoryQuery findQuery;
- public static void appendConditions(DynamicQuery qry, FindQualifiers fq, List<JAXBElement<?>> catElems, List<Object> keysIn) {
- String predicate = DynamicQuery.PREDICATE_EQUALS;
- if (fq.isApproximateMatch()) {
- predicate = DynamicQuery.PREDICATE_LIKE;
- }
-
- int count = 0;
- qry.WHERE().pad().openParen().pad();
- for(JAXBElement<?> elem : catElems) {
- String tmodelKey = null;
- String keyValue = null;
- String keyName = null;
-
- if (elem != null && elem.getValue() instanceof KeyedReference) {
- KeyedReference kr = (KeyedReference)elem.getValue();
- tmodelKey = kr.getTModelKey();
- keyValue = kr.getKeyValue();
- keyName = kr.getKeyName();
- }
- else if (elem != null && elem.getValue() instanceof KeyedReferenceGroup) {
-
- }
-
- if (fq.isApproximateMatch()) {
- keyValue = keyValue.endsWith(DynamicQuery.WILDCARD)?keyValue:keyValue + DynamicQuery.WILDCARD;
- keyName = keyName.endsWith(DynamicQuery.WILDCARD)?keyName:keyName + DynamicQuery.WILDCARD;
- }
-
- String keyValueTerm = "bc.keyValue";
- String keyNameTerm = "bc.keyName";
- if (fq.isCaseInsensitiveMatch()) {
- keyValueTerm = "upper(bc.keyValue)";
- keyValue = keyValue.toUpperCase();
-
- keyNameTerm = "upper(bc.keyName)";
- keyName = keyName.toUpperCase();
- }
-
- if (Constants.GENERAL_KEYWORD_TMODEL.equalsIgnoreCase(tmodelKey)) {
- qry.appendGroupedAnd(new DynamicQuery.Parameter("bc.tmodelKeyRef", tmodelKey, DynamicQuery.PREDICATE_EQUALS),
- new DynamicQuery.Parameter(keyValueTerm, keyValue, predicate),
- new DynamicQuery.Parameter(keyNameTerm, keyName, predicate));
- }
- else {
- qry.appendGroupedAnd(new DynamicQuery.Parameter("bc.tmodelKeyRef", tmodelKey, DynamicQuery.PREDICATE_EQUALS),
- new DynamicQuery.Parameter(keyValueTerm, keyValue, predicate));
-
- }
-
- if (count + 1 < catElems.size()) {
- if (fq.isOrAllKeys())
- qry.OR().pad();
- else
- qry.AND().pad();
- }
-
- count++;
- }
- qry.closeParen().pad();
-
- qry.appendInListWithAnd("bc.id.businessKey", keysIn);
+ static {
+ findQuery = new FindEntityByCategoryQuery(BusinessEntityQuery.ENTITY_NAME,
+ BusinessEntityQuery.ENTITY_ALIAS,
+ BusinessEntityQuery.KEY_NAME,
+ BusinessEntityQuery.ENTITY_FIELD,
+ ENTITY_NAME_CHILD);
}
- public static void appendGrouping(DynamicQuery qry, FindQualifiers fq, int elemCount) {
- qry.GROUPBY().pad().append("bc.id.businessKey").pad();
-
- // By default, all the "keys" switches in find qualifiers are turned off. The default behavior for categories is to "AND" the keyed references.
- if (fq.isOrAllKeys()) {
- // do nothing
- }
- else
- qry.HAVING().pad().append("count(bc.id.businessKey >=" + elemCount).pad();
-
+ public static List<?> select(EntityManager em, FindQualifiers fq, CategoryBag categoryBag, List<?> keysIn) {
+ return findQuery.select(em, fq, categoryBag, keysIn);
}
}
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByTModelKeyQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByTModelKeyQuery.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByTModelKeyQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindBusinessByTModelKeyQuery.java Tue Dec 16 17:53:32 2008
@@ -130,21 +130,21 @@
if (!fq.isOrAllKeys()) {
tblCount++;
qry.comma().pad().append(ENTITY_NAME_CHILD + " " + entityAliasChild + tblCount).pad();
- thetaJoins.append(entityAliasChild + (tblCount - 1) + "." + ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " = " + entityAliasChild + tblCount + "." + ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " ");
+ thetaJoins.append(entityAliasChild + (tblCount - 1) + "." + BindingTemplateQuery.ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " = " + entityAliasChild + tblCount + "." + BindingTemplateQuery.ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " ");
thetaJoins.append(DynamicQuery.OPERATOR_AND + " ");
}
}
else {
qry.comma().pad().append(ENTITY_NAME_CHILD + " " + entityAliasChild + tblCount).pad();
- thetaJoins.append(BindingTemplateQuery.ENTITY_ALIAS + "." + BindingTemplateQuery.KEY_NAME + " = " + entityAliasChild + tblCount + "." + ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " ");
+ thetaJoins.append(BindingTemplateQuery.ENTITY_ALIAS + "." + BindingTemplateQuery.KEY_NAME + " = " + entityAliasChild + tblCount + "." + BindingTemplateQuery.ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " ");
thetaJoins.append(DynamicQuery.OPERATOR_AND + " ");
}
}
qry.WHERE().pad().openParen().pad();
- qry.append(ENTITY_ALIAS + "." + KEY_NAME + " = " + BusinessServiceQuery.ENTITY_ALIAS + ".businessEntity." + KEY_NAME).pad();
- qry.AND().pad().append(BusinessServiceQuery.ENTITY_ALIAS + "." + BusinessServiceQuery.KEY_NAME + " = " + BindingTemplateQuery.ENTITY_ALIAS + ".businessService." + BusinessServiceQuery.KEY_NAME).pad();
+ qry.append(ENTITY_ALIAS + "." + KEY_NAME + " = " + BusinessServiceQuery.ENTITY_ALIAS + "." + ENTITY_FIELD + "." + KEY_NAME).pad();
+ qry.AND().pad().append(BusinessServiceQuery.ENTITY_ALIAS + "." + BusinessServiceQuery.KEY_NAME + " = " + BindingTemplateQuery.ENTITY_ALIAS + "." + BusinessServiceQuery.ENTITY_FIELD + "." + BusinessServiceQuery.KEY_NAME).pad();
qry.AND().pad();
String thetaJoinsStr = thetaJoins.toString();
Added: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByCategoryQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByCategoryQuery.java?rev=727243&view=auto
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByCategoryQuery.java (added)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByCategoryQuery.java Tue Dec 16 17:53:32 2008
@@ -0,0 +1,291 @@
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * 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.apache.juddi.query;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collections;
+import javax.persistence.EntityManager;
+import javax.xml.bind.JAXBElement;
+
+import org.apache.juddi.config.Constants;
+import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.apache.juddi.query.util.KeyedRefTModelComparator;
+import org.apache.log4j.Logger;
+import org.uddi.api_v3.CategoryBag;
+import org.uddi.api_v3.KeyedReference;
+
+/**
+ * Returns the list of "entity" keys possessing the keyedReferences in the passed category bag.
+ * Output is restricted by list of "entity" keys passed in. If null, all entities are searched.
+ * Output is produced by building the appropriate JPA query based on input and find qualifiers.
+ *
+ * NOTES:
+ * 1) Identifiers are grouped with a logical AND by default.
+ * 2) Concerning when the categories are AND'd together - the only way this can be done with a single query was to create a self-join for
+ * each category. If there are a lot of categories, the performance could suffer.
+ * TODO: Test performance with multiple AND'd categories. If too slow, look to process this query in multiple steps.
+ * 3) The "orLikeKeys" qualifier complicates matters. The "like" keys are OR'd together and these groups of "like" keys are AND'd together.
+ * As with "andAllKeys", self-joins are created but only one for each group of "like" keys. If none of the keyedReferences passed are alike then this
+ * will reduce to an "andAllKeys" query. If all are alike, then this will query will exhibit the behavior of OR'ing all keys.
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+public class FindEntityByCategoryQuery extends EntityQuery {
+
+ private Logger log = Logger.getLogger(FindEntityByCategoryQuery.class);
+
+ private static final String ENTITY_KEYEDREFERENCE = "KeyedReference";
+ private static final String ALIAS_KEYEDREFERENCE = buildAlias(ENTITY_KEYEDREFERENCE);
+ private static final String FIELD_CATEGORYBAG = "categoryBag";
+
+ private String entityName;
+ private String entityAlias;
+ private String keyName;
+ private String entityField;
+ private String entityNameChild;
+ private String entityAliasChild;
+ private String selectSQL;
+
+ public FindEntityByCategoryQuery(String entityName, String entityAlias, String keyName, String entityField, String entityNameChild) {
+ this.entityName = entityName;
+ this.entityAlias = entityAlias;
+ this.keyName = keyName;
+ this.entityField = entityField;
+ this.entityNameChild = entityNameChild;
+ this.entityAliasChild = buildAlias(entityNameChild);
+
+ StringBuffer sql = new StringBuffer(200);
+ sql.append("select distinct " + entityAlias + "." + keyName + " from " + entityName + " " + entityAlias + " , " + entityNameChild + " " + entityAliasChild + " ");
+ selectSQL = sql.toString();
+ }
+
+ public String getEntityName() {
+ return entityName;
+ }
+
+ public String getEntityAlias() {
+ return entityAlias;
+ }
+
+ public String getKeyName() {
+ return keyName;
+ }
+
+ public String getEntityField() {
+ return entityField;
+ }
+
+ public String getEntityNameChild() {
+ return entityNameChild;
+ }
+
+ public String getEntityAliasChild() {
+ return entityAliasChild;
+ }
+
+ public String getSelectSQL() {
+ return selectSQL;
+ }
+
+
+ public List<?> select(EntityManager em, FindQualifiers fq, CategoryBag categoryBag, List<?> keysIn, DynamicQuery.Parameter... restrictions) {
+ // If keysIn is not null and empty, then search is over.
+ if ((keysIn != null) && (keysIn.size() == 0))
+ return keysIn;
+
+ if (categoryBag == null)
+ return keysIn;
+
+ List<JAXBElement<?>> categories = categoryBag.getContent();
+ if (categories == null || categories.size() == 0)
+ return keysIn;
+
+ List<KeyedReference> keyedRefs = new ArrayList<KeyedReference>(0);
+ for (JAXBElement<?> elem : categories) {
+ if (elem.getValue() instanceof KeyedReference)
+ keyedRefs.add((KeyedReference)elem.getValue());
+ }
+ if (keyedRefs.size() == 0)
+ return keysIn;
+
+ DynamicQuery dynamicQry = new DynamicQuery(selectSQL);
+ appendConditions(dynamicQry, fq, keyedRefs);
+ if (restrictions != null && restrictions.length > 0)
+ dynamicQry.AND().pad().appendGroupedAnd(restrictions);
+
+ return getQueryResult(em, dynamicQry, keysIn, entityAlias + "." + keyName);
+ }
+
+
+ /*
+ * Appends the conditions to the query based on the keyedReference list. With the default or when "orAllKeys" is passed, the keyedReferences are autonomous and are
+ * all AND'd or OR'd respectively. However, "orLikeKeys" requires special treatment. The goal is to create the conditions in this format:
+ *
+ * (likeKey1 = X or likeKey1 = Y) and (likeKey2 = A or likeKey2 = B or likeKey2 = C)
+ *
+ * ie. the "like" KeyedReferences are OR'd and the groups of "like" KeyedReferences are AND'd with each other.
+ */
+ public void appendConditions(DynamicQuery qry, FindQualifiers fq, List<KeyedReference> keyedRefs) {
+
+ // Append the necessary tables (two will always be added connecting the entity to its category table and then the category table to the keyed references).
+ appendJoinTables(qry, fq, keyedRefs);
+ qry.AND().pad().openParen().pad();
+
+ String predicate = DynamicQuery.PREDICATE_EQUALS;
+ if (fq.isApproximateMatch()) {
+ predicate = DynamicQuery.PREDICATE_LIKE;
+ }
+
+ // Sorting the collection by tModel Key
+ Collections.sort(keyedRefs, new KeyedRefTModelComparator());
+
+ String prevTModelKey = null;
+ int count = 0;
+ int tblCount = -1;
+ for(KeyedReference keyedRef : keyedRefs) {
+ String tmodelKey = keyedRef.getTModelKey();
+ String keyValue = keyedRef.getKeyValue();
+ String keyName = keyedRef.getKeyName();
+
+ if (fq.isApproximateMatch()) {
+ keyValue = keyValue.endsWith(DynamicQuery.WILDCARD)?keyValue:keyValue + DynamicQuery.WILDCARD;
+ keyName = keyName.endsWith(DynamicQuery.WILDCARD)?keyName:keyName + DynamicQuery.WILDCARD;
+ }
+
+ // Either opening up (and AND'ing) a new "group" of like keys or simply appending an "or". If this is not "orLikeKeys", then just need to increment
+ // the table count.
+ if (fq.isOrLikeKeys()) {
+ if (count == 0) {
+ qry.openParen().pad();
+ tblCount++;
+ }
+ else {
+ if (!tmodelKey.equals(prevTModelKey)) {
+ qry.closeParen().pad().AND().pad().openParen().pad();
+ tblCount++;
+ }
+ else
+ qry.OR().pad();
+ }
+ }
+ else
+ tblCount++;
+
+ String keyValueTerm = (fq.isOrAllKeys()?ALIAS_KEYEDREFERENCE + "0":ALIAS_KEYEDREFERENCE + tblCount) + ".keyValue";
+ String keyNameTerm = (fq.isOrAllKeys()?ALIAS_KEYEDREFERENCE + "0":ALIAS_KEYEDREFERENCE + tblCount) + ".keyName";
+ String tmodelKeyTerm = (fq.isOrAllKeys()?ALIAS_KEYEDREFERENCE + "0":ALIAS_KEYEDREFERENCE + tblCount) + ".tmodelKeyRef";
+ if (fq.isCaseInsensitiveMatch()) {
+ keyValueTerm = "upper(" + keyValueTerm + ")";
+ keyValue = keyValue.toUpperCase();
+
+ keyNameTerm = "upper(" + keyNameTerm + ")";
+ keyName = keyName.toUpperCase();
+ }
+
+
+ // According to specification, if the "general keyword" tmodel is used, then the keyName must be part of the query.
+ if (Constants.GENERAL_KEYWORD_TMODEL.equalsIgnoreCase(tmodelKey)) {
+ qry.appendGroupedAnd(new DynamicQuery.Parameter(tmodelKeyTerm, tmodelKey, DynamicQuery.PREDICATE_EQUALS),
+ new DynamicQuery.Parameter(keyValueTerm, keyValue, predicate),
+ new DynamicQuery.Parameter(keyNameTerm, keyName, predicate));
+ }
+ else {
+ qry.appendGroupedAnd(new DynamicQuery.Parameter(tmodelKeyTerm, tmodelKey, DynamicQuery.PREDICATE_EQUALS),
+ new DynamicQuery.Parameter(keyValueTerm, keyValue, predicate));
+
+ }
+
+ if (count + 1 < keyedRefs.size())
+ if (fq.isOrAllKeys())
+ qry.OR().pad();
+ else if (fq.isOrLikeKeys()) {
+ }
+ else
+ qry.AND().pad();
+
+ // The "orLikeKeys" will always leave an unclosed parenthesis. This will close it.
+ if (fq.isOrLikeKeys() && (count + 1 == keyedRefs.size()))
+ qry.closeParen().pad();
+
+ prevTModelKey = tmodelKey;
+ count++;
+ }
+ qry.closeParen().pad();
+
+ }
+
+
+
+ /*
+ * Appends the necessary join table for the child entity and additional tables for when keys are AND'd. When "orLikeKeys" is used,
+ * we only need an extra table for each distinct tmodelKey.
+ */
+ public void appendJoinTables(DynamicQuery qry, FindQualifiers fq, List<KeyedReference> keyedRefs) {
+
+ if (keyedRefs != null & keyedRefs.size() > 0) {
+ // Sorting the collection by tModel Key
+ Collections.sort(keyedRefs, new KeyedRefTModelComparator());
+
+ StringBuffer thetaJoins = new StringBuffer(200);
+ int tblCount = 0;
+ int count = 0;
+ String curTModelKey = null;
+ String prevTModelKey = null;
+ for(KeyedReference kr : keyedRefs) {
+ curTModelKey = kr.getTModelKey();
+ if (count != 0) {
+ if (!fq.isOrAllKeys()) {
+ if (fq.isOrLikeKeys() && curTModelKey.equals(prevTModelKey)) {
+ // Do nothing
+ }
+ else {
+ tblCount++;
+ qry.comma().pad().append(ENTITY_KEYEDREFERENCE + " " + ALIAS_KEYEDREFERENCE + tblCount).pad();
+ thetaJoins.append(ALIAS_KEYEDREFERENCE + (tblCount - 1) + "." + FIELD_CATEGORYBAG + ".id = " + ALIAS_KEYEDREFERENCE + tblCount + "." + FIELD_CATEGORYBAG + ".id ");
+ thetaJoins.append(DynamicQuery.OPERATOR_AND + " ");
+ }
+ }
+
+ }
+ else {
+ qry.comma().pad().append(ENTITY_KEYEDREFERENCE + " " + ALIAS_KEYEDREFERENCE + tblCount).pad();
+ thetaJoins.append(entityAliasChild + ".id = " + ALIAS_KEYEDREFERENCE + tblCount + "." + FIELD_CATEGORYBAG + ".id ");
+ thetaJoins.append(DynamicQuery.OPERATOR_AND + " ");
+ }
+ prevTModelKey = curTModelKey;
+ count++;
+ }
+
+ qry.WHERE().pad().openParen().pad();
+
+ // Appending the middling entity-specific category table condition
+ qry.append(entityAlias + "." + keyName + " = " + entityAliasChild + "." + entityField + "." + KEY_NAME).pad();
+ qry.AND().pad();
+
+ String thetaJoinsStr = thetaJoins.toString();
+ if (thetaJoinsStr.endsWith(DynamicQuery.OPERATOR_AND + " "))
+ thetaJoinsStr = thetaJoinsStr.substring(0, thetaJoinsStr.length() - (DynamicQuery.OPERATOR_AND + " ").length());
+ qry.append(thetaJoinsStr);
+
+ qry.closeParen().pad();
+ }
+ }
+
+}
Propchange: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByCategoryQuery.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindEntityByIdentifierQuery.java Tue Dec 16 17:53:32 2008
@@ -174,14 +174,14 @@
else
tblCount++;
- String keyValueTerm = (fq.isAndAllKeys()||fq.isOrLikeKeys()?entityAliasChild + tblCount:entityAlias + "0") + ".keyValue";
- String keyNameTerm = (fq.isAndAllKeys()||fq.isOrLikeKeys()?entityAliasChild + tblCount:entityAlias + "0") + ".keyName";
- String tmodelKeyTerm = (fq.isAndAllKeys()||fq.isOrLikeKeys()?entityAliasChild + tblCount:entityAlias + "0") + ".tmodelKeyRef";
+ String keyValueTerm = (fq.isAndAllKeys()||fq.isOrLikeKeys()?entityAliasChild + tblCount:entityAliasChild + "0") + ".keyValue";
+ String keyNameTerm = (fq.isAndAllKeys()||fq.isOrLikeKeys()?entityAliasChild + tblCount:entityAliasChild + "0") + ".keyName";
+ String tmodelKeyTerm = (fq.isAndAllKeys()||fq.isOrLikeKeys()?entityAliasChild + tblCount:entityAliasChild + "0") + ".tmodelKeyRef";
if (fq.isCaseInsensitiveMatch()) {
- keyValueTerm = "upper(" + (fq.isAndAllKeys()||fq.isOrLikeKeys()?entityAliasChild + tblCount:entityAlias + "0") + ".keyValue)";
+ keyValueTerm = "upper(" + keyValueTerm + ")";
keyValue = keyValue.toUpperCase();
- keyNameTerm = "upper(" + (fq.isAndAllKeys()||fq.isOrLikeKeys()?entityAliasChild + tblCount:entityAlias + "0") + ".keyName)";
+ keyNameTerm = "upper(" + keyNameTerm + ")";
keyName = keyName.toUpperCase();
}
Added: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByCategoryQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByCategoryQuery.java?rev=727243&view=auto
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByCategoryQuery.java (added)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByCategoryQuery.java Tue Dec 16 17:53:32 2008
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * 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.apache.juddi.query;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.uddi.api_v3.CategoryBag;
+
+/**
+ * Returns the list of service keys possessing the keyedReferences in the passed category bag.
+ * Output is restricted by list of service keys passed in. If null, all business services are searched.
+ * Output is produced by building the appropriate JPA query based on input and find qualifiers.
+ *
+ * From specification:
+ * "This is a list of category references. The returned serviceList contains serviceInfo structures matching all of
+ * the categories passed (logical AND by default). Specifying the appropriate findQualifiers can override this behavior."
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+public class FindServiceByCategoryQuery {
+
+ private static final String ENTITY_NAME_CHILD = "ServiceCategoryBag";
+
+ private static FindEntityByCategoryQuery findQuery;
+
+ static {
+ findQuery = new FindEntityByCategoryQuery(BusinessServiceQuery.ENTITY_NAME,
+ BusinessServiceQuery.ENTITY_ALIAS,
+ BusinessServiceQuery.KEY_NAME,
+ BusinessServiceQuery.ENTITY_FIELD,
+ ENTITY_NAME_CHILD);
+ }
+
+ public static List<?> select(EntityManager em, FindQualifiers fq, CategoryBag categoryBag, String parentKey, List<?> keysIn) {
+ if (parentKey != null && parentKey.length() > 0) {
+ DynamicQuery.Parameter param = new DynamicQuery.Parameter(BusinessServiceQuery.ENTITY_ALIAS + "." + BusinessServiceQuery.KEY_NAME_PARENT, parentKey, DynamicQuery.PREDICATE_EQUALS);
+ return findQuery.select(em, fq, categoryBag, keysIn, param);
+ }
+ else
+ return findQuery.select(em, fq, categoryBag, keysIn);
+ }
+}
Propchange: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByCategoryQuery.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByTModelKeyQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByTModelKeyQuery.java?rev=727243&r1=727242&r2=727243&view=diff
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByTModelKeyQuery.java (original)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindServiceByTModelKeyQuery.java Tue Dec 16 17:53:32 2008
@@ -131,20 +131,20 @@
if (!fq.isOrAllKeys()) {
tblCount++;
qry.comma().pad().append(ENTITY_NAME_CHILD + " " + entityAliasChild + tblCount).pad();
- thetaJoins.append(entityAliasChild + (tblCount - 1) + "." + ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " = " + entityAliasChild + tblCount + "." + ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " ");
+ thetaJoins.append(entityAliasChild + (tblCount - 1) + "." + BindingTemplateQuery.ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " = " + entityAliasChild + tblCount + "." + BindingTemplateQuery.ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " ");
thetaJoins.append(DynamicQuery.OPERATOR_AND + " ");
}
}
else {
qry.comma().pad().append(ENTITY_NAME_CHILD + " " + entityAliasChild + tblCount).pad();
- thetaJoins.append(BindingTemplateQuery.ENTITY_ALIAS + "." + BindingTemplateQuery.KEY_NAME + " = " + entityAliasChild + tblCount + "." + ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " ");
+ thetaJoins.append(BindingTemplateQuery.ENTITY_ALIAS + "." + BindingTemplateQuery.KEY_NAME + " = " + entityAliasChild + tblCount + "." + BindingTemplateQuery.ENTITY_FIELD + "." + BindingTemplateQuery.KEY_NAME + " ");
thetaJoins.append(DynamicQuery.OPERATOR_AND + " ");
}
}
qry.WHERE().pad().openParen().pad();
- qry.append(ENTITY_ALIAS + "." + KEY_NAME + " = " + BindingTemplateQuery.ENTITY_ALIAS + ".businessService." + KEY_NAME).pad();
+ qry.append(ENTITY_ALIAS + "." + KEY_NAME + " = " + BindingTemplateQuery.ENTITY_ALIAS + "." + ENTITY_FIELD + "." + KEY_NAME).pad();
qry.AND().pad();
String thetaJoinsStr = thetaJoins.toString();
Added: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByCategoryQuery.java
URL: http://svn.apache.org/viewvc/webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByCategoryQuery.java?rev=727243&view=auto
==============================================================================
--- webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByCategoryQuery.java (added)
+++ webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByCategoryQuery.java Tue Dec 16 17:53:32 2008
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2001-2008 The Apache Software Foundation.
+ *
+ * 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.apache.juddi.query;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.apache.juddi.query.util.FindQualifiers;
+import org.uddi.api_v3.CategoryBag;
+
+/**
+ * Returns the list of tModel keys possessing the keyedReferences in the passed category bag.
+ * Output is restricted by list of tModel keys passed in. If null, all tModels are searched.
+ * Output is produced by building the appropriate JPA query based on input and find qualifiers.
+ *
+ * From specification:
+ * "This is a list of category references. The returned tModelList contains tModelInfo elements whose
+ * associated tModels match all of the categories passed (logical AND by default). Specifying the
+ * appropriate findQualifiers can override this behavior."
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+public class FindTModelByCategoryQuery {
+
+ private static final String ENTITY_NAME_CHILD = "TmodelCategoryBag";
+
+ private static FindEntityByCategoryQuery findQuery;
+
+ static {
+ findQuery = new FindEntityByCategoryQuery(TModelQuery.ENTITY_NAME,
+ TModelQuery.ENTITY_ALIAS,
+ TModelQuery.KEY_NAME,
+ TModelQuery.ENTITY_FIELD,
+ ENTITY_NAME_CHILD);
+ }
+
+ public static List<?> select(EntityManager em, FindQualifiers fq, CategoryBag categoryBag, List<?> keysIn) {
+ return findQuery.select(em, fq, categoryBag, keysIn);
+ }
+}
Propchange: webservices/juddi/branches/v3_trunk/juddi-core/src/main/java/org/apache/juddi/query/FindTModelByCategoryQuery.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
---------------------------------------------------------------------
To unsubscribe, e-mail: juddi-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: juddi-cvs-help@ws.apache.org