33import com .google .common .collect .Lists ;
44import in .kuros .jfirebase .metadata .Attribute ;
55import in .kuros .jfirebase .metadata .AttributeValue ;
6- import in .kuros .jfirebase .metadata .UpdateAttribute ;
76import in .kuros .jfirebase .provider .firebase .AttributeValueHelper ;
87import in .kuros .jfirebase .provider .firebase .EntityHelper ;
98import lombok .Getter ;
109
11- import java .util .Arrays ;
1210import java .util .List ;
1311import java .util .Objects ;
1412
1513public final class QueryBuilder <T > extends QueryImpl <T > {
1614 @ Getter private final String path ;
1715 @ Getter private Class <T > resultType ;
16+ @ Getter private boolean collectionGroup ;
1817 private final AttributeValueHelper attributeValueHelper ;
1918
2019 @ SuppressWarnings ("unchecked" )
21- private QueryBuilder (final Class <T > type ) {
22- this (getCollectionName (type ), type );
23- }
2420
25- private QueryBuilder (final String path , final Class <T > resultType ) {
21+ private QueryBuilder (final String path , final Class <T > resultType , final boolean collectionGroup ) {
2622 this .path = path ;
2723 this .resultType = resultType ;
2824 this .attributeValueHelper = new AttributeValueHelper ();
25+ this .collectionGroup = collectionGroup ;
2926 }
3027
3128 public static <S > QueryBuilder <S > collection (final Class <S > type ) {
32- return new QueryBuilder <>(type );
29+ return new QueryBuilder <>(getCollectionName ( type ), type , false );
3330 }
3431
3532 public static <S > QueryBuilder <S > collection (final String path , final Class <S > resultType ) {
36- return new QueryBuilder <>(path , resultType );
33+ return new QueryBuilder <>(path , resultType , false );
34+ }
35+
36+ public static <S > QueryBuilder <S > collectionGroup (final Class <S > type ) {
37+ return new QueryBuilder <>(getCollectionName (type ), type , true );
38+ }
39+
40+ public static <S > QueryBuilder <S > collectionGroup (final String path , final Class <S > resultType ) {
41+ return new QueryBuilder <>(path , resultType , true );
3742 }
3843
3944 public <S > QueryBuilder <S > subCollection (final Class <S > type ) {
40- return new QueryBuilder <>(path + "/" + getCollectionName (type ), type );
45+ return new QueryBuilder <>(path + "/" + getCollectionName (type ), type , collectionGroup );
4146 }
4247
4348 public <S > QueryBuilder <S > subCollection (final String collection , final Class <S > resultClass ) {
44- return new QueryBuilder <>(path + "/" + collection , resultClass );
49+ return new QueryBuilder <>(path + "/" + collection , resultClass , collectionGroup );
4550 }
4651
4752 public QueryBuilder <T > withId (final String id ) {
48- return new QueryBuilder <>(path + "/" + id , resultType );
53+ return new QueryBuilder <>(path + "/" + id , resultType , collectionGroup );
4954 }
5055
5156 public QueryBuilder <T > withPath (final String pathValue ) {
52- return new QueryBuilder <>(path + pathValue , resultType );
57+ return new QueryBuilder <>(path + pathValue , resultType , collectionGroup );
5358 }
5459
5560 @ SuppressWarnings ("unchecked" )
@@ -65,11 +70,11 @@ public static <T> QueryBuilder<T> withKeys(List<AttributeValue<T, ?>> attributeV
6570 final T entity = attributeValueHelper .createEntity (attributeValues );
6671 final String documentPath = EntityHelper .INSTANCE .getDocumentPath (entity );
6772
68- return new QueryBuilder <>(documentPath , attributeValues .get (0 ).getAttribute ().getDeclaringType ());
73+ return new QueryBuilder <>(documentPath , attributeValues .get (0 ).getAttribute ().getDeclaringType (), false );
6974 }
7075
7176 public <S > QueryBuilder <S > resultType (final Class <S > resultClass ) {
72- return new QueryBuilder <>(path , resultClass );
77+ return new QueryBuilder <>(path , resultClass , collectionGroup );
7378 }
7479
7580 private static String getCollectionName (final Class <?> type ) {
0 commit comments