View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.syncope.common.lib.search;
20  
21  import java.util.Collections;
22  import java.util.Map;
23  import org.apache.cxf.jaxrs.ext.search.client.FiqlSearchConditionBuilder;
24  import org.apache.cxf.jaxrs.ext.search.fiql.FiqlParser;
25  
26  /**
27   * Extends {@link AbstractFiqlSearchConditionBuilder} by providing some additional facilities for searching
28   * any objects in Syncope.
29   */
30  public class AnyObjectFiqlSearchConditionBuilder extends AbstractFiqlSearchConditionBuilder<
31          AnyObjectProperty, AnyObjectPartialCondition, AnyObjectCompleteCondition> {
32  
33      private static final long serialVersionUID = -3248603004632741935L;
34  
35      private final String type;
36  
37      public AnyObjectFiqlSearchConditionBuilder(final String type) {
38          super();
39          this.type = type;
40      }
41  
42      @Override
43      protected Builder newBuilderInstance() {
44          return new Builder(properties);
45      }
46  
47      @Override
48      public String query() {
49          return new FiqlSearchConditionBuilder.Builder(Collections.<String, String>emptyMap()).
50                  is(SpecialAttr.TYPE.toString()).equalTo(type).query();
51      }
52  
53      @Override
54      public AnyObjectProperty is(final String property) {
55          return newBuilderInstance().is(property);
56      }
57  
58      public AnyObjectCompleteCondition inGroups(final String group, final String... moreGroups) {
59          return newBuilderInstance().
60                  is(SpecialAttr.GROUPS.toString()).
61                  inGroups(group, moreGroups);
62      }
63  
64      public AnyObjectCompleteCondition notInGroups(final String group, final String... moreGroups) {
65          return newBuilderInstance().
66                  is(SpecialAttr.GROUPS.toString()).
67                  notInGroups(group, moreGroups);
68      }
69  
70      public AnyObjectCompleteCondition inRelationships(final String anyObject, final String... moreAnyObjects) {
71          return newBuilderInstance().
72                  is(SpecialAttr.RELATIONSHIPS.toString()).
73                  inRelationships(anyObject, moreAnyObjects);
74      }
75  
76      public AnyObjectCompleteCondition notInRelationships(final String anyObject, final String... moreAnyObjects) {
77          return newBuilderInstance().
78                  is(SpecialAttr.RELATIONSHIPS.toString()).
79                  notInRelationships(anyObject, moreAnyObjects);
80      }
81  
82      public AnyObjectCompleteCondition inRelationshipTypes(final String type, final String... moreTypes) {
83          return newBuilderInstance().
84                  is(SpecialAttr.RELATIONSHIP_TYPES.toString()).
85                  inRelationshipTypes(type, moreTypes);
86      }
87  
88      public AnyObjectCompleteCondition notInRelationshipTypes(final String type, final String... moreTypes) {
89          return newBuilderInstance().
90                  is(SpecialAttr.RELATIONSHIP_TYPES.toString()).
91                  notInRelationshipTypes(type, moreTypes);
92      }
93  
94      protected class Builder extends AbstractFiqlSearchConditionBuilder.Builder<
95              AnyObjectProperty, AnyObjectPartialCondition, AnyObjectCompleteCondition>
96              implements AnyObjectProperty, AnyObjectPartialCondition, AnyObjectCompleteCondition {
97  
98          public Builder(final Map<String, String> properties) {
99              super(properties);
100         }
101 
102         public Builder(final Builder parent) {
103             super(parent);
104         }
105 
106         @Override
107         public String query() {
108             FiqlSearchConditionBuilder.Builder b = new FiqlSearchConditionBuilder.Builder(this);
109             return b.and(SpecialAttr.TYPE.toString()).equalTo(type).query();
110         }
111 
112         @Override
113         public AnyObjectProperty is(final String property) {
114             Builder b = new Builder(this);
115             b.result = property;
116             return b;
117         }
118 
119         @Override
120         public AnyObjectCompleteCondition inGroups(final String group, final String... moreGroups) {
121             this.result = SpecialAttr.GROUPS.toString();
122             return condition(FiqlParser.EQ, group, (Object[]) moreGroups);
123         }
124 
125         @Override
126         public AnyObjectCompleteCondition notInGroups(final String group, final String... moreGroups) {
127             this.result = SpecialAttr.GROUPS.toString();
128             return condition(FiqlParser.NEQ, group, (Object[]) moreGroups);
129         }
130 
131         @Override
132         public AnyObjectCompleteCondition inRelationships(final String anyObject, final String... moreAnyObjects) {
133             this.result = SpecialAttr.RELATIONSHIPS.toString();
134             return condition(FiqlParser.EQ, anyObject, (Object[]) moreAnyObjects);
135         }
136 
137         @Override
138         public AnyObjectCompleteCondition notInRelationships(final String group, final String... moreRelationships) {
139             this.result = SpecialAttr.RELATIONSHIPS.toString();
140             return condition(FiqlParser.NEQ, group, (Object[]) moreRelationships);
141         }
142 
143         @Override
144         public AnyObjectCompleteCondition inRelationshipTypes(final String type, final String... moreTypes) {
145             this.result = SpecialAttr.RELATIONSHIP_TYPES.toString();
146             return condition(FiqlParser.EQ, type, (Object[]) moreTypes);
147         }
148 
149         @Override
150         public AnyObjectCompleteCondition notInRelationshipTypes(final String type, final String... moreTypes) {
151             this.result = SpecialAttr.RELATIONSHIP_TYPES.toString();
152             return condition(FiqlParser.NEQ, type, (Object[]) moreTypes);
153         }
154     }
155 }