]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - search/BasicSearch.java
1 package org
.argeo
.api
.acr
.search
;
4 import java
.util
.ArrayList
;
5 import java
.util
.Arrays
;
7 import java
.util
.Objects
;
8 import java
.util
.function
.Consumer
;
10 import javax
.xml
.namespace
.QName
;
12 import org
.argeo
.api
.acr
.QNamed
;
15 * A basic search mechanism modelled on WebDav basicsearch.
17 * @see http://www.webdav.org/specs/rfc5323.html
19 public class BasicSearch
{
21 private List
<QName
> select
= new ArrayList
<>();
22 private List
<Scope
> from
= new ArrayList
<>();
24 private ContentFilter
<?
extends Composition
> where
;
26 public BasicSearch
select(QNamed
... attr
) {
28 select
.add(q
.qName());
32 public BasicSearch
select(QName
... attr
) {
33 select
.addAll(Arrays
.asList(attr
));
37 public BasicSearch
from(URI uri
) {
38 return from(uri
, Depth
.INFINITTY
);
41 public BasicSearch
from(URI uri
, Depth depth
) {
42 Objects
.requireNonNull(uri
);
43 Objects
.requireNonNull(depth
);
44 Scope scope
= new Scope(uri
, depth
);
49 public BasicSearch
where(Consumer
<AndFilter
> and
) {
51 throw new IllegalStateException("A where clause is already set");
52 AndFilter subFilter
= new AndFilter();
53 and
.accept(subFilter
);
58 public List
<QName
> getSelect() {
62 public List
<Scope
> getFrom() {
66 public ContentFilter
<?
extends Composition
> getWhere() {
70 public static enum Depth
{
74 public static class Scope
{
79 public Scope(URI uri
, Depth depth
) {
88 public Depth
getDepth() {
94 // static void main(String[] args) {
95 // BasicSearch search = new BasicSearch();
96 // search.select(DName.creationdate.qName()) //
97 // .from(URI.create("/test")) //
98 // .where((f) -> f.eq(DName.creationdate.qName(), ""));