This project has retired. For details please refer to its
Attic page.
FindEntityByNamesQuery xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.juddi.query;
19
20 import java.util.List;
21
22 import javax.persistence.EntityManager;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.apache.juddi.query.util.DynamicQuery;
27 import org.apache.juddi.query.util.FindQualifiers;
28 import org.uddi.api_v3.Name;
29
30
31
32
33
34
35
36
37 public class FindEntityByNamesQuery extends EntityQuery {
38
39 @SuppressWarnings("unused")
40 private static Log log = LogFactory.getLog(FindEntityByNamesQuery.class);
41
42 private final String entityName;
43 private final String entityAlias;
44 private final String keyName;
45 private final String entityField;
46 private final String entityNameChild;
47 private final String entityAliasChild;
48 private final String selectSQL;
49 private String signaturePresent;
50
51 public FindEntityByNamesQuery(String entityName, String entityAlias, String keyName, String entityField,
52 String entityNameChild, String signaturePresent) {
53 this.entityName = entityName;
54 this.entityAlias = entityAlias;
55 this.keyName = keyName;
56 this.entityField = entityField;
57 this.entityNameChild = entityNameChild;
58 this.entityAliasChild = buildAlias(entityNameChild);
59 this.signaturePresent = signaturePresent;
60
61 StringBuffer sql = new StringBuffer(200);
62 sql.append("select distinct " + entityAlias + "." + keyName + " from " + entityName + " " + entityAlias + " ");
63 selectSQL = sql.toString();
64 }
65
66 public String getEntityName() {
67 return entityName;
68 }
69
70 public String getEntityAlias() {
71 return entityAlias;
72 }
73
74 public String getKeyName() {
75 return keyName;
76 }
77
78 public String getEntityField() {
79 return entityField;
80 }
81
82 public String getEntityNameChild() {
83 return entityNameChild;
84 }
85
86 public String getEntityAliasChild() {
87 return entityAliasChild;
88 }
89
90 public String getSelectSQL() {
91 return selectSQL;
92 }
93
94 public String getSignaturePresent() {
95 return signaturePresent;
96 }
97
98 public void setSignaturePresent(String signaturePresent) {
99 this.signaturePresent = signaturePresent;
100 }
101
102 public List<Object> select(EntityManager em, FindQualifiers fq, List<Name> names, List<Object> keysIn, DynamicQuery.Parameter... restrictions) {
103
104 if ((keysIn != null) && (keysIn.size() == 0))
105 return keysIn;
106
107 if (names == null || names.size() == 0)
108 return keysIn;
109
110 DynamicQuery dynamicQry = new DynamicQuery(selectSQL);
111 appendConditions(dynamicQry, fq, names);
112 if (restrictions != null && restrictions.length > 0)
113 dynamicQry.AND().pad().appendGroupedAnd(restrictions);
114
115 return getQueryResult(em, dynamicQry, keysIn, entityAlias + "." + keyName);
116 }
117
118
119
120
121 public void appendConditions(DynamicQuery qry, FindQualifiers fq, List<Name> names) {
122
123
124 appendJoinTables(qry, fq, names);
125 qry.AND().pad().openParen().pad();
126
127 String namePredicate = DynamicQuery.PREDICATE_EQUALS;
128 if (fq.isApproximateMatch()) {
129 namePredicate = DynamicQuery.PREDICATE_LIKE;
130 }
131
132 int count = 0;
133 for(Name n : names) {
134 String nameTerm = entityAliasChild + ".name";
135 String nameValue = n.getValue();
136 if (fq.isCaseInsensitiveMatch()) {
137 nameTerm = "upper(" + entityAliasChild + ".name)";
138 nameValue = n.getValue().toUpperCase();
139 }
140
141
142
143
144 if (n.getLang() == null || n.getLang().length() == 0 ) {
145 qry.appendGroupedAnd(new DynamicQuery.Parameter(nameTerm, nameValue, namePredicate));
146 }
147 else {
148
149 String langValue = n.getLang().endsWith(DynamicQuery.WILDCARD)?n.getLang().toUpperCase():n.getLang().toUpperCase() + DynamicQuery.WILDCARD;
150 qry.appendGroupedAnd(new DynamicQuery.Parameter(nameTerm, nameValue, namePredicate),
151 new DynamicQuery.Parameter("upper(" + entityAliasChild + ".langCode)", langValue, DynamicQuery.PREDICATE_LIKE));
152 }
153
154 if (count + 1 < names.size())
155 qry.OR().pad();
156
157 count++;
158 }
159 qry.closeParen().pad();
160
161 }
162
163
164
165
166 public void appendJoinTables(DynamicQuery qry, FindQualifiers fq, List<Name> names) {
167 qry.comma().pad().append(entityNameChild + " " + entityAliasChild).pad();
168 qry.WHERE().pad().openParen().pad();
169 qry.append(entityAlias + "." + keyName + " = " + entityAliasChild + "." + entityField + "." + keyName + " ");
170 qry.closeParen().pad();
171 if (fq!=null && fq.isSignaturePresent()) {
172 qry.AND().pad().openParen().pad().append(getSignaturePresent()).pad().closeParen().pad();
173 }
174 }
175
176
177
178 }