Skip to content

Commit 9beadff

Browse files
author
ehennum
committed
Bug:25862 shortcut for raw IO object or class when handle is registered
git-svn-id: svn+ssh://svn.marklogic.com/project/engsvn/client-api/java/branches/b2_0@162185 62cac252-8da6-4816-9e9d-6dc37b19578c
1 parent 97f0514 commit 9beadff

File tree

3 files changed

+35
-163
lines changed

3 files changed

+35
-163
lines changed

src/main/java/com/marklogic/client/example/cookbook/RawCombinedSearch.java

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.marklogic.client.io.Format;
2727
import com.marklogic.client.io.InputStreamHandle;
2828
import com.marklogic.client.io.SearchHandle;
29-
import com.marklogic.client.io.StringHandle;
3029
import com.marklogic.client.query.MatchDocumentSummary;
3130
import com.marklogic.client.query.MatchLocation;
3231
import com.marklogic.client.query.MatchSnippet;
@@ -54,50 +53,6 @@ public static void run(ExampleProperties props) throws IOException {
5453

5554
setUpExample(client);
5655

57-
// use either shortcut or strong typed IO
58-
runShortcut(client);
59-
runStrongTyped(client);
60-
61-
tearDownExample(client);
62-
63-
// release the client
64-
client.release();
65-
}
66-
public static void runShortcut(DatabaseClient client) throws IOException {
67-
// create a manager for searching
68-
QueryManager queryMgr = client.newQueryManager();
69-
70-
// specify the query and options for the search criteria
71-
// in raw XML (raw JSON is also supported)
72-
String rawSearch = new StringBuilder()
73-
.append("<search:search ")
74-
.append( "xmlns:search='http://marklogic.com/appservices/search'>")
75-
.append("<search:query>")
76-
.append( "<search:term-query>")
77-
.append( "<search:text>neighborhoods</search:text>")
78-
.append( "</search:term-query>")
79-
.append( "<search:value-constraint-query>")
80-
.append( "<search:constraint-name>industry</search:constraint-name>")
81-
.append( "<search:text>Real Estate</search:text>")
82-
.append( "</search:value-constraint-query>")
83-
.append("</search:query>")
84-
.append("<search:options>")
85-
.append( "<search:constraint name='industry'>")
86-
.append( "<search:value>")
87-
.append( "<search:element name='industry' ns=''/>")
88-
.append( "</search:value>")
89-
.append( "</search:constraint>")
90-
.append("</search:options>")
91-
.append("</search:search>")
92-
.toString();
93-
94-
// run the search
95-
String results = queryMgr.searchAs(Format.XML, rawSearch, String.class);
96-
97-
System.out.println("(Shortcut) Matched:\n"+results+"\n");
98-
}
99-
public static void runStrongTyped(DatabaseClient client)
100-
throws IOException {
10156
// create a manager for searching
10257
QueryManager queryMgr = client.newQueryManager();
10358

@@ -125,12 +80,9 @@ public static void runStrongTyped(DatabaseClient client)
12580
.append("</search:search>")
12681
.toString();
12782

128-
// create a handle for the search criteria
129-
StringHandle rawHandle = new StringHandle(rawSearch);
130-
131-
// create a search definition based on the handle
83+
// create a search definition for the search criteria
13284
RawCombinedQueryDefinition querydef
133-
= queryMgr.newRawCombinedQueryDefinition(rawHandle);
85+
= queryMgr.newRawCombinedQueryDefinitionAs(Format.XML, rawSearch);
13486

13587
// create a handle for the search results
13688
SearchHandle resultsHandle = new SearchHandle();

src/main/java/com/marklogic/client/impl/QueryManagerImpl.java

Lines changed: 21 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import com.marklogic.client.query.QueryManager;
4848
import com.marklogic.client.query.RawCombinedQueryDefinition;
4949
import com.marklogic.client.query.RawQueryByExampleDefinition;
50-
import com.marklogic.client.query.RawQueryDefinition;
5150
import com.marklogic.client.query.RawStructuredQueryDefinition;
5251
import com.marklogic.client.query.StringQueryDefinition;
5352
import com.marklogic.client.query.StructuredQueryBuilder;
@@ -158,64 +157,6 @@ public ValuesListDefinition newValuesListDefinition(String optionsName) {
158157
return new ValuesListDefinitionImpl(optionsName);
159158
}
160159

161-
// shortcut search
162-
@Override
163-
public <T> T searchAs(Format format, Object query, Class<T> as) {
164-
return searchAs(format, query, as, 1);
165-
}
166-
@Override
167-
public <T> T searchAs(Format format, Object query, Class<T> as, long start) {
168-
if (as == null) {
169-
throw new IllegalArgumentException("no type to search as");
170-
}
171-
172-
QueryDefinition querydef = null;
173-
if (query == null) {
174-
querydef = new StringQueryDefinitionImpl(null).withCriteria("");
175-
} else if (RawQueryDefinition.class.isAssignableFrom(query.getClass())) {
176-
RawQueryDefinition rawQuery = (RawQueryDefinition) query;
177-
Utilities.setHandleStructuredFormat(rawQuery.getHandle(), format);
178-
querydef = rawQuery;
179-
} else if (QueryDefinition.class.isAssignableFrom(query.getClass())) {
180-
querydef = (QueryDefinition) query;
181-
} else if (StructureWriteHandle.class.isAssignableFrom(query.getClass())) {
182-
StructureWriteHandle queryHandle = (StructureWriteHandle) query;
183-
Utilities.setHandleStructuredFormat(queryHandle, format);
184-
querydef = new RawQueryDefinitionImpl.Combined(queryHandle);
185-
} else {
186-
Class<?> queryAs = query.getClass();
187-
ContentHandle<?> queryHandle = getHandleRegistry().makeHandle(queryAs);
188-
if (!StructureWriteHandle.class.isAssignableFrom(queryHandle.getClass())) {
189-
throw new IllegalArgumentException(
190-
"Handle "+queryHandle.getClass().getName()+
191-
" cannot be used to search with "+queryAs.getName()
192-
);
193-
}
194-
Utilities.setHandleContent(queryHandle, query);
195-
Utilities.setHandleStructuredFormat(queryHandle, format);
196-
querydef = new RawQueryDefinitionImpl.Combined((StructureWriteHandle) queryHandle);
197-
}
198-
199-
if (as.isAssignableFrom(SearchHandle.class)) {
200-
SearchHandle searchHandle = new SearchHandle();
201-
search(querydef, searchHandle, start);
202-
return as.cast(searchHandle);
203-
} else {
204-
ContentHandle<T> resultHandle = getHandleRegistry().makeHandle(as);
205-
if (!SearchReadHandle.class.isAssignableFrom(resultHandle.getClass())) {
206-
throw new IllegalArgumentException(
207-
"Handle "+resultHandle.getClass().getName()+
208-
" cannot be used to search for "+as.getName()
209-
);
210-
}
211-
Utilities.setHandleStructuredFormat(resultHandle, format);
212-
213-
search(querydef, (SearchReadHandle) resultHandle, start);
214-
return resultHandle.get();
215-
}
216-
}
217-
218-
// strongly typed search
219160
@Override
220161
public <T extends SearchReadHandle> T search(QueryDefinition querydef, T searchHandle) {
221162
return search(querydef, searchHandle, 1, null);
@@ -543,12 +484,12 @@ public SuggestDefinition newSuggestDefinition(String suggestString,
543484
}
544485

545486
@Override
546-
public RawCombinedQueryDefinition newRawCombinedQueryDefinitionAs(Object rawQuery) {
547-
return newRawCombinedQueryDefinitionAs(rawQuery, null);
487+
public RawCombinedQueryDefinition newRawCombinedQueryDefinitionAs(Format format, Object rawQuery) {
488+
return newRawCombinedQueryDefinitionAs(format, rawQuery, null);
548489
}
549490
@Override
550-
public RawCombinedQueryDefinition newRawCombinedQueryDefinitionAs(Object rawQuery, String optionsName) {
551-
return newRawCombinedQueryDefinition(structuredWrite(rawQuery), optionsName);
491+
public RawCombinedQueryDefinition newRawCombinedQueryDefinitionAs(Format format, Object rawQuery, String optionsName) {
492+
return newRawCombinedQueryDefinition(structuredWrite(format, rawQuery), optionsName);
552493
}
553494
@Override
554495
public RawCombinedQueryDefinition newRawCombinedQueryDefinition(StructureWriteHandle handle) {
@@ -560,12 +501,12 @@ public RawCombinedQueryDefinition newRawCombinedQueryDefinition(StructureWriteHa
560501
}
561502

562503
@Override
563-
public RawStructuredQueryDefinition newRawStructuredQueryDefinitionAs(Object query) {
564-
return newRawStructuredQueryDefinitionAs(query, null);
504+
public RawStructuredQueryDefinition newRawStructuredQueryDefinitionAs(Format format, Object query) {
505+
return newRawStructuredQueryDefinitionAs(format, query, null);
565506
}
566507
@Override
567-
public RawStructuredQueryDefinition newRawStructuredQueryDefinitionAs(Object query, String optionsName) {
568-
return newRawStructuredQueryDefinition(structuredWrite(query), optionsName);
508+
public RawStructuredQueryDefinition newRawStructuredQueryDefinitionAs(Format format, Object query, String optionsName) {
509+
return newRawStructuredQueryDefinition(structuredWrite(format, query), optionsName);
569510
}
570511
@Override
571512
public RawStructuredQueryDefinition newRawStructuredQueryDefinition(StructureWriteHandle handle) {
@@ -577,12 +518,12 @@ public RawStructuredQueryDefinition newRawStructuredQueryDefinition(StructureWri
577518
}
578519

579520
@Override
580-
public RawQueryByExampleDefinition newRawQueryByExampleDefinitionAs(Object query) {
581-
return newRawQueryByExampleDefinitionAs(query, null);
521+
public RawQueryByExampleDefinition newRawQueryByExampleDefinitionAs(Format format, Object query) {
522+
return newRawQueryByExampleDefinitionAs(format, query, null);
582523
}
583524
@Override
584-
public RawQueryByExampleDefinition newRawQueryByExampleDefinitionAs(Object query, String optionsName) {
585-
return newRawQueryByExampleDefinition(structuredWrite(query), optionsName);
525+
public RawQueryByExampleDefinition newRawQueryByExampleDefinitionAs(Format format, Object query, String optionsName) {
526+
return newRawQueryByExampleDefinition(structuredWrite(format, query), optionsName);
586527
}
587528
@Override
588529
public RawQueryByExampleDefinition newRawQueryByExampleDefinition(StructureWriteHandle handle) {
@@ -593,16 +534,19 @@ public RawQueryByExampleDefinition newRawQueryByExampleDefinition(StructureWrite
593534
return new RawQueryDefinitionImpl.ByExample(handle, optionsName);
594535
}
595536

596-
private StructureWriteHandle structuredWrite(Object content) {
597-
Class<?> as = content.getClass();
598-
ContentHandle<?> handle = getHandleRegistry().makeHandle(as);
599-
if (!StructureWriteHandle.class.isAssignableFrom(handle.getClass())) {
537+
private StructureWriteHandle structuredWrite(Format format, Object query) {
538+
Class<?> as = query.getClass();
539+
ContentHandle<?> queryHandle = getHandleRegistry().makeHandle(as);
540+
if (!StructureWriteHandle.class.isAssignableFrom(queryHandle.getClass())) {
600541
throw new IllegalArgumentException(
601-
"Handle "+handle.getClass().getName()+
542+
"Handle "+queryHandle.getClass().getName()+
602543
" does not provide structure write handle for "+as.getName()
603544
);
604545
}
605546

606-
return (StructureWriteHandle) handle;
547+
Utilities.setHandleContent(queryHandle, query);
548+
Utilities.setHandleStructuredFormat(queryHandle, format);
549+
550+
return (StructureWriteHandle) queryHandle;
607551
}
608552
}

src/main/java/com/marklogic/client/query/QueryManager.java

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -231,36 +231,6 @@ public enum QueryView {
231231
*/
232232
public KeyLocator newKeyLocator(String key);
233233

234-
/**
235-
* Searches documents based on query criteria and, potentially, previously
236-
* saved query options with a query or a search response or both in the JSON or
237-
* XML representation provided as an object of an IO class.
238-
*
239-
* The IO class must have been registered before creating the database client.
240-
* By default, standard Java IO classes for document content are registered.
241-
*
242-
* @param format whether the format of the representation is JSON or XML
243-
* @param query an IO representation of the JSON or XML query or a query definition (including one built by StructuredQueryBuilder)
244-
* @param as the IO class for reading the search response or SearchHandle.class
245-
* @return an object of the IO class with the content of the search response or a new SearchHandle
246-
*/
247-
public <T> T searchAs(Format format, Object query, Class<T> as);
248-
/**
249-
* Searches documents based on query criteria and, potentially, previously
250-
* saved query options with a query or a search response or both in the JSON or
251-
* XML representation provided as an object of an IO class.
252-
*
253-
* The IO class must have been registered before creating the database client.
254-
* By default, standard Java IO classes for document content are registered.
255-
*
256-
* @param format whether the format of the representation is JSON or XML
257-
* @param query an IO representation of the JSON or XML query or a query definition (including one built by StructuredQueryBuilder)
258-
* @param as the IO class for reading the search response or SearchHandle.class
259-
* @param start the offset of the first document in the page (where 1 is the first result)
260-
* @return an object of the IO class with the content of the search response or a new SearchHandle
261-
*/
262-
public <T> T searchAs(Format format, Object query, Class<T> as, long start);
263-
264234
/**
265235
* Searches documents based on query criteria and, potentially, previously
266236
* saved query options.
@@ -506,21 +476,23 @@ public enum QueryView {
506476
* The IO class must have been registered before creating the database client.
507477
* By default, standard Java IO classes for document content are registered.
508478
*
479+
* @param format whether the format of the representation is JSON or XML
509480
* @param rawQuery an IO representation of the JSON or XML combined query
510481
* @return a QueryDefinition for use of the combined query
511482
*/
512-
public RawCombinedQueryDefinition newRawCombinedQueryDefinitionAs(Object rawQuery);
483+
public RawCombinedQueryDefinition newRawCombinedQueryDefinitionAs(Format format, Object rawQuery);
513484
/**
514485
* Defines a combined query from a JSON or XML representation provided as an object of an IO class.
515486
*
516487
* The IO class must have been registered before creating the database client.
517488
* By default, standard Java IO classes for document content are registered.
518489
*
490+
* @param format whether the format of the representation is JSON or XML
519491
* @param rawQuery an IO representation of the JSON or XML combined query
520492
* @param optionsName the name of a persisted query options configuration
521493
* @return a QueryDefinition for use of the combined query
522494
*/
523-
public RawCombinedQueryDefinition newRawCombinedQueryDefinitionAs(Object rawQuery, String optionsName);
495+
public RawCombinedQueryDefinition newRawCombinedQueryDefinitionAs(Format format, Object rawQuery, String optionsName);
524496

525497
/**
526498
* Defines a combined query from a JSON or XML representation.
@@ -542,21 +514,23 @@ public enum QueryView {
542514
* The IO class must have been registered before creating the database client.
543515
* By default, standard Java IO classes for document content are registered.
544516
*
517+
* @param format whether the format of the representation is JSON or XML
545518
* @param rawQuery an IO representation of the JSON or XML structured query
546519
* @return a QueryDefinition for use of the structured query.
547520
*/
548-
public RawStructuredQueryDefinition newRawStructuredQueryDefinitionAs(Object rawQuery);
521+
public RawStructuredQueryDefinition newRawStructuredQueryDefinitionAs(Format format, Object rawQuery);
549522
/**
550523
* Defines a structured query from a JSON or XML representation provided as an object of an IO class.
551524
*
552525
* The IO class must have been registered before creating the database client.
553526
* By default, standard Java IO classes for document content are registered.
554527
*
528+
* @param format whether the format of the representation is JSON or XML
555529
* @param rawQuery an IO representation of the JSON or XML structured query
556530
* @param optionsName the name of a persisted query options configuration
557531
* @return a QueryDefinition for use of the structured query.
558532
*/
559-
public RawStructuredQueryDefinition newRawStructuredQueryDefinitionAs(Object rawQuery, String optionsName);
533+
public RawStructuredQueryDefinition newRawStructuredQueryDefinitionAs(Format format, Object rawQuery, String optionsName);
560534

561535
/**
562536
* Defines a structured query from a JSON or XML representation.
@@ -578,21 +552,23 @@ public enum QueryView {
578552
* The IO class must have been registered before creating the database client.
579553
* By default, standard Java IO classes for document content are registered.
580554
*
555+
* @param format whether the format of the representation is JSON or XML
581556
* @param rawQuery an IO representation of the query by example
582557
* @return a QueryDefinition for use of the query by example
583558
*/
584-
public RawQueryByExampleDefinition newRawQueryByExampleDefinitionAs(Object rawQuery);
559+
public RawQueryByExampleDefinition newRawQueryByExampleDefinitionAs(Format format, Object rawQuery);
585560
/**
586561
* Defines a simple query by example from a JSON or XML representation provided as an object of an IO class.
587562
*
588563
* The IO class must have been registered before creating the database client.
589564
* By default, standard Java IO classes for document content are registered.
590565
*
566+
* @param format whether the format of the representation is JSON or XML
591567
* @param rawQuery an IO representation of the query by example
592568
* @param optionsName the name of a persisted query options configuration
593569
* @return a QueryDefinition for use of the query by example
594570
*/
595-
public RawQueryByExampleDefinition newRawQueryByExampleDefinitionAs(Object rawQuery, String optionsName);
571+
public RawQueryByExampleDefinition newRawQueryByExampleDefinitionAs(Format format, Object rawQuery, String optionsName);
596572

597573
/**
598574
* Defines a simple query by example from a JSON or XML representation.

0 commit comments

Comments
 (0)