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.Map;
22  import org.apache.cxf.jaxrs.ext.search.fiql.FiqlParser;
23  
24  /**
25   * Extends {@link AbstractFiqlSearchConditionBuilder} by providing some additional facilities for searching
26   * users in Syncope.
27   */
28  public class UserFiqlSearchConditionBuilder
29          extends AbstractFiqlSearchConditionBuilder<UserProperty, UserPartialCondition, UserCompleteCondition> {
30  
31      private static final long serialVersionUID = 3485708634448845774L;
32  
33      @Override
34      protected Builder newBuilderInstance() {
35          return new Builder(properties);
36      }
37  
38      @Override
39      public UserProperty is(final String property) {
40          return newBuilderInstance().is(property);
41      }
42  
43      public UserCompleteCondition inGroups(final String group, final String... moreGroups) {
44          return newBuilderInstance().
45                  is(SpecialAttr.GROUPS.toString()).
46                  inGroups(group, moreGroups);
47      }
48  
49      public UserCompleteCondition notInGroups(final String group, final String... moreGroups) {
50          return newBuilderInstance().
51                  is(SpecialAttr.GROUPS.toString()).
52                  notInGroups(group, moreGroups);
53      }
54  
55      public UserCompleteCondition inRelationships(final String anyObject, final String... moreAnyObjects) {
56          return newBuilderInstance().
57                  is(SpecialAttr.RELATIONSHIPS.toString()).
58                  inRelationships(anyObject, moreAnyObjects);
59      }
60  
61      public UserCompleteCondition notInRelationships(final String anyObject, final String... moreAnyObjects) {
62          return newBuilderInstance().
63                  is(SpecialAttr.RELATIONSHIPS.toString()).
64                  notInRelationships(anyObject, moreAnyObjects);
65      }
66  
67      public UserCompleteCondition inRelationshipTypes(final String type, final String... moreTypes) {
68          return newBuilderInstance().
69                  is(SpecialAttr.RELATIONSHIP_TYPES.toString()).
70                  inRelationshipTypes(type, moreTypes);
71      }
72  
73      public UserCompleteCondition notInRelationshipTypes(final String type, final String... moreTypes) {
74          return newBuilderInstance().
75                  is(SpecialAttr.RELATIONSHIP_TYPES.toString()).
76                  notInRelationshipTypes(type, moreTypes);
77      }
78  
79      public UserCompleteCondition inRoles(final String role, final String... moreRoles) {
80          return newBuilderInstance().
81                  is(SpecialAttr.ROLES.toString()).
82                  inRoles(role, moreRoles);
83      }
84  
85      public UserCompleteCondition notInRoles(final String role, final String... moreRoles) {
86          return newBuilderInstance().
87                  is(SpecialAttr.ROLES.toString()).
88                  notInRoles(role, moreRoles);
89      }
90  
91      public UserCompleteCondition withPrivileges(final String privilege, final String... morePrivileges) {
92          return newBuilderInstance().
93                  is(SpecialAttr.PRIVILEGES.toString()).
94                  withPrivileges(privilege, morePrivileges);
95      }
96  
97      public UserCompleteCondition withoutPrivileges(final String privilege, final String... morePrivileges) {
98          return newBuilderInstance().
99                  is(SpecialAttr.PRIVILEGES.toString()).
100                 withoutPrivileges(privilege, morePrivileges);
101     }
102 
103     protected static class Builder extends AbstractFiqlSearchConditionBuilder.Builder<
104             UserProperty, UserPartialCondition, UserCompleteCondition>
105             implements UserProperty, UserPartialCondition, UserCompleteCondition {
106 
107         public Builder(final Map<String, String> properties) {
108             super(properties);
109         }
110 
111         public Builder(final Builder parent) {
112             super(parent);
113         }
114 
115         @Override
116         public UserProperty is(final String property) {
117             Builder builder = new Builder(this);
118             builder.result = property;
119             return builder;
120         }
121 
122         @Override
123         public UserCompleteCondition inGroups(final String group, final String... moreGroups) {
124             this.result = SpecialAttr.GROUPS.toString();
125             return condition(FiqlParser.EQ, group, (Object[]) moreGroups);
126         }
127 
128         @Override
129         public UserCompleteCondition notInGroups(final String group, final String... moreGroups) {
130             this.result = SpecialAttr.GROUPS.toString();
131             return condition(FiqlParser.NEQ, group, (Object[]) moreGroups);
132         }
133 
134         @Override
135         public UserCompleteCondition inRelationships(final String anyObject, final String... moreAnyObjects) {
136             this.result = SpecialAttr.RELATIONSHIPS.toString();
137             return condition(FiqlParser.EQ, anyObject, (Object[]) moreAnyObjects);
138         }
139 
140         @Override
141         public UserCompleteCondition notInRelationships(final String anyObject, final String... moreAnyObjects) {
142             this.result = SpecialAttr.RELATIONSHIPS.toString();
143             return condition(FiqlParser.NEQ, anyObject, (Object[]) moreAnyObjects);
144         }
145 
146         @Override
147         public UserCompleteCondition inRelationshipTypes(final String type, final String... moreTypes) {
148             this.result = SpecialAttr.RELATIONSHIP_TYPES.toString();
149             return condition(FiqlParser.EQ, type, (Object[]) moreTypes);
150         }
151 
152         @Override
153         public UserCompleteCondition notInRelationshipTypes(final String type, final String... moreTypes) {
154             this.result = SpecialAttr.RELATIONSHIP_TYPES.toString();
155             return condition(FiqlParser.NEQ, type, (Object[]) moreTypes);
156         }
157 
158         @Override
159         public UserCompleteCondition inRoles(final String role, final String... moreRoles) {
160             this.result = SpecialAttr.ROLES.toString();
161             return condition(FiqlParser.EQ, role, (Object[]) moreRoles);
162         }
163 
164         @Override
165         public UserCompleteCondition notInRoles(final String role, final String... moreRoles) {
166             this.result = SpecialAttr.ROLES.toString();
167             return condition(FiqlParser.NEQ, role, (Object[]) moreRoles);
168         }
169 
170         @Override
171         public UserCompleteCondition withPrivileges(final String privilege, final String... morePrivileges) {
172             this.result = SpecialAttr.PRIVILEGES.toString();
173             return condition(FiqlParser.EQ, privilege, (Object[]) morePrivileges);
174         }
175 
176         @Override
177         public UserCompleteCondition withoutPrivileges(final String privilege, final String... morePrivileges) {
178             this.result = SpecialAttr.PRIVILEGES.toString();
179             return condition(FiqlParser.NEQ, privilege, (Object[]) morePrivileges);
180         }
181     }
182 }