You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ge...@apache.org on 2011/05/16 12:09:42 UTC
svn commit: r1103670 - in
/geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query:
FindEntityByNamesQuery.java FindTModelByNameQuery.java
Author: genspring
Date: Mon May 16 10:09:41 2011
New Revision: 1103670
URL: http://svn.apache.org/viewvc?rev=1103670&view=rev
Log:
If the name in query contains "%" , it sould be a like clause.
Added:
geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java
geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java
Added: geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java?rev=1103670&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java (added)
+++ geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindEntityByNamesQuery.java Mon May 16 10:09:41 2011
@@ -0,0 +1,166 @@
+/*
+ * 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.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.uddi.api_v3.Name;
+
+/**
+ * Returns the list of "entity" keys possessing the Names in the passed Name list.
+ * 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.
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+public class FindEntityByNamesQuery extends EntityQuery {
+
+ @SuppressWarnings("unused")
+ private static Log log = LogFactory.getLog(FindEntityByNamesQuery.class);
+
+ private String entityName;
+ private String entityAlias;
+ private String keyName;
+ private String entityField;
+ private String entityNameChild;
+ private String entityAliasChild;
+ private String selectSQL;
+
+ public FindEntityByNamesQuery(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 + " ");
+ 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, List<Name> names, 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 (names == null || names.size() == 0)
+ return keysIn;
+
+ DynamicQuery dynamicQry = new DynamicQuery(selectSQL);
+ appendConditions(dynamicQry, fq, names);
+ 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 name list.
+ */
+ public void appendConditions(DynamicQuery qry, FindQualifiers fq, List<Name> names) {
+
+ // Append the necessary tables (one will always be added connecting the entity to its name table).
+ appendJoinTables(qry, fq, names);
+ qry.AND().pad().openParen().pad();
+
+ String namePredicate = DynamicQuery.PREDICATE_EQUALS;
+ if (fq.isApproximateMatch()) {
+ namePredicate = DynamicQuery.PREDICATE_LIKE;
+ }
+
+ int count = 0;
+ for(Name n : names) {
+ String nameTerm = entityAliasChild + ".name";
+ String nameValue = n.getValue();
+ if (fq.isCaseInsensitiveMatch()) {
+ nameTerm = "upper(" + entityAliasChild + ".name)";
+ nameValue = n.getValue().toUpperCase();
+ }
+
+ String tempNamePredicate = nameValue.indexOf("%") > -1 ? DynamicQuery.PREDICATE_LIKE : namePredicate;
+
+ // JUDDI-235: wildcards are provided by user (only commenting in case a new interpretation arises)
+ //if (fq.isApproximateMatch())
+ // nameValue = nameValue.endsWith(DynamicQuery.WILDCARD)?nameValue:nameValue + DynamicQuery.WILDCARD;
+
+ if (n.getLang() == null || n.getLang().length() == 0 ) {
+ qry.appendGroupedAnd(new DynamicQuery.Parameter(nameTerm, nameValue, tempNamePredicate));
+ }
+ else {
+ // Per spec, the language argument is always wildcarded and case insensitive
+ String langValue = n.getLang().endsWith(DynamicQuery.WILDCARD)?n.getLang().toUpperCase():n.getLang().toUpperCase() + DynamicQuery.WILDCARD;
+ qry.appendGroupedAnd(new DynamicQuery.Parameter(nameTerm, nameValue, tempNamePredicate),
+ new DynamicQuery.Parameter("upper(" + entityAliasChild + ".langCode)", langValue, DynamicQuery.PREDICATE_LIKE));
+ }
+
+ if (count + 1 < names.size())
+ qry.OR().pad();
+
+ count++;
+ }
+ qry.closeParen().pad();
+
+ }
+
+ /*
+ * Appends the necessary join table for the child entity
+ */
+ public void appendJoinTables(DynamicQuery qry, FindQualifiers fq, List<Name> names) {
+ qry.comma().pad().append(entityNameChild + " " + entityAliasChild).pad();
+ qry.WHERE().pad().openParen().pad();
+ qry.append(entityAlias + "." + keyName + " = " + entityAliasChild + "." + entityField + "." + keyName + " ");
+ qry.closeParen().pad();
+ }
+
+}
Added: geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java?rev=1103670&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java (added)
+++ geronimo/server/trunk/plugins/uddi/uddi-war-repackage/src/main/java/org/apache/juddi/query/FindTModelByNameQuery.java Mon May 16 10:09:41 2011
@@ -0,0 +1,106 @@
+/*
+ * 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.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.query.util.DynamicQuery;
+import org.apache.juddi.query.util.FindQualifiers;
+import org.uddi.api_v3.Name;
+
+/**
+ *
+ * Returns the list of tmodel keys possessing the passed Name argument.
+ * 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 string value represents the name of the tModel elements to be found. Since tModel data only has a single
+ * name, only a single name may be passed. The argument must match exactly since "exactMatch" is the default behavior,
+ * but if the "approximateMatch" findQualifier is used together with the appropriate wildcard character, then matching
+ * is done according to wildcard rules. See Section 5.1.6 About Wildcards for additional information. The name MAY be
+ * marked with an xml:lang adornment. If a language markup is specified, the search results report a match only on those
+ * entries that match both the name value and language criteria. The match on language is a leftmost case-insensitive
+ * comparison of the characters supplied. This allows one to find all tModels whose name begins with an "A" and are expressed
+ * in any dialect of French, for example. Values which can be passed in the language criteria adornment MUST obey the rules
+ * governing the xml:lang data type as defined in Section 3.3.2.3 name."
+ *
+ * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
+ */
+public class FindTModelByNameQuery extends TModelQuery {
+
+ @SuppressWarnings("unused")
+ private static Log log = LogFactory.getLog(FindTModelByNameQuery.class);
+
+ public static List<?> select(EntityManager em, FindQualifiers fq, Name name, 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 (name == null)
+ return keysIn;
+
+ DynamicQuery dynamicQry = new DynamicQuery(selectSQL);
+ appendConditions(dynamicQry, fq, name);
+ // Since this is a tModel, don't need to search the lazily deleted ones.
+ dynamicQry.AND().pad().appendGroupedAnd(new DynamicQuery.Parameter(ENTITY_ALIAS + ".deleted", new Boolean(false), DynamicQuery.PREDICATE_EQUALS));
+ if (restrictions != null && restrictions.length > 0)
+ dynamicQry.AND().pad().appendGroupedAnd(restrictions);
+
+ return getQueryResult(em, dynamicQry, keysIn, ENTITY_ALIAS + "." + KEY_NAME);
+ }
+
+ public static void appendConditions(DynamicQuery qry, FindQualifiers fq, Name name) {
+ String namePredicate = DynamicQuery.PREDICATE_EQUALS;
+ if (fq.isApproximateMatch()) {
+ namePredicate = DynamicQuery.PREDICATE_LIKE;
+ }
+
+ qry.WHERE().pad().openParen().pad();
+
+ String nameTerm = ENTITY_ALIAS + ".name";
+ String nameValue = name.getValue();
+
+ namePredicate = nameValue.indexOf("%") > -1 ? DynamicQuery.PREDICATE_LIKE : namePredicate;
+
+ if (fq.isCaseInsensitiveMatch()) {
+ nameTerm = "upper(" + ENTITY_ALIAS + ".name)";
+ nameValue = name.getValue().toUpperCase();
+ }
+ // JUDDI-235: wildcards are provided by user (only commenting in case a new interpretation arises)
+ //if (fq.isApproximateMatch())
+ // nameValue = nameValue.endsWith(DynamicQuery.WILDCARD)?nameValue:nameValue + DynamicQuery.WILDCARD;
+
+ if (name.getLang() == null || name.getLang().length() == 0 ) {
+ qry.appendGroupedAnd(new DynamicQuery.Parameter(nameTerm, nameValue, namePredicate));
+ }
+ else {
+ String langValue = name.getLang().endsWith(DynamicQuery.WILDCARD)?name.getLang().toUpperCase():name.getLang().toUpperCase() + DynamicQuery.WILDCARD;
+ qry.appendGroupedAnd(new DynamicQuery.Parameter(nameTerm, nameValue, namePredicate),
+ new DynamicQuery.Parameter("upper(" + ENTITY_ALIAS + ".langCode)", langValue, DynamicQuery.PREDICATE_LIKE));
+ }
+
+ qry.closeParen().pad();
+
+ }
+
+}