@@ -161,6 +161,8 @@ public ResourceResponse<Database> createDatabase(Database database, RequestOptio
161
161
throw new IllegalArgumentException ("Database" );
162
162
}
163
163
164
+ DocumentClient .validateResource (database );
165
+
164
166
Map <String , String > requestHeaders = this .getRequestHeaders (options );
165
167
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Database ,
166
168
Paths .DATABASES_ROOT ,
@@ -284,6 +286,8 @@ public ResourceResponse<DocumentCollection> createCollection(String databaseLink
284
286
throw new IllegalArgumentException ("collection" );
285
287
}
286
288
289
+ DocumentClient .validateResource (collection );
290
+
287
291
String path = DocumentClient .joinPath (databaseLink , Paths .COLLECTIONS_PATH_SEGMENT );
288
292
Map <String , String > requestHeaders = this .getRequestHeaders (options );
289
293
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .DocumentCollection ,
@@ -293,6 +297,34 @@ public ResourceResponse<DocumentCollection> createCollection(String databaseLink
293
297
return new ResourceResponse <DocumentCollection >(this .doCreate (request ), DocumentCollection .class );
294
298
}
295
299
300
+ /**
301
+ * Replaces a document collection.
302
+ *
303
+ * @param collection the document collection to use.
304
+ * @param options the request options.
305
+ * @return the resource response with the replaced document collection.
306
+ * @throws DocumentClientException the document client exception.
307
+ */
308
+ public ResourceResponse <DocumentCollection > replaceCollection (DocumentCollection collection ,
309
+ RequestOptions options )
310
+ throws DocumentClientException {
311
+
312
+ if (collection == null ) {
313
+ throw new IllegalArgumentException ("collection" );
314
+ }
315
+
316
+ DocumentClient .validateResource (collection );
317
+
318
+ String path = DocumentClient .joinPath (collection .getSelfLink (), null );
319
+ Map <String , String > requestHeaders = this .getRequestHeaders (options );
320
+
321
+ DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .DocumentCollection ,
322
+ path ,
323
+ collection ,
324
+ requestHeaders );
325
+ return new ResourceResponse <DocumentCollection >(this .doReplace (request ), DocumentCollection .class );
326
+ }
327
+
296
328
/**
297
329
* Deletes a document collection by the collection link.
298
330
*
@@ -442,6 +474,8 @@ public ResourceResponse<Document> createDocument(String collectionLink,
442
474
443
475
Document typedDocument = Document .FromObject (document );
444
476
477
+ DocumentClient .validateResource (typedDocument );
478
+
445
479
if (typedDocument .getId () == null && !disableAutomaticIdGeneration ) {
446
480
// We are supposed to use GUID. Basically UUID is the same as GUID
447
481
// when represented as a string.
@@ -475,9 +509,12 @@ public ResourceResponse<Document> replaceDocument(String documentLink, Object do
475
509
throw new IllegalArgumentException ("document" );
476
510
}
477
511
512
+ Document typedDocument = Document .FromObject (document );
513
+ DocumentClient .validateResource (typedDocument );
514
+
478
515
String path = DocumentClient .joinPath (documentLink , null );
479
516
Map <String , String > requestHeaders = this .getRequestHeaders (options );
480
- Document typedDocument = Document . FromObject ( document );
517
+
481
518
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Document ,
482
519
path ,
483
520
typedDocument ,
@@ -500,6 +537,8 @@ public ResourceResponse<Document> replaceDocument(Document document, RequestOpti
500
537
throw new IllegalArgumentException ("document" );
501
538
}
502
539
540
+ DocumentClient .validateResource (document );
541
+
503
542
String path = DocumentClient .joinPath (document .getSelfLink (), null );
504
543
Map <String , String > requestHeaders = this .getRequestHeaders (options );
505
544
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Document ,
@@ -641,6 +680,8 @@ public ResourceResponse<StoredProcedure> createStoredProcedure(String collection
641
680
throw new IllegalArgumentException ("storedProcedure" );
642
681
}
643
682
683
+ DocumentClient .validateResource (storedProcedure );
684
+
644
685
String path = DocumentClient .joinPath (collectionLink , Paths .STORED_PROCEDURES_PATH_SEGMENT );
645
686
Map <String , String > requestHeaders = this .getRequestHeaders (options );
646
687
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .StoredProcedure ,
@@ -666,6 +707,8 @@ public ResourceResponse<StoredProcedure> replaceStoredProcedure(StoredProcedure
666
707
throw new IllegalArgumentException ("storedProcedure" );
667
708
}
668
709
710
+ DocumentClient .validateResource (storedProcedure );
711
+
669
712
String path = DocumentClient .joinPath (storedProcedure .getSelfLink (), null );
670
713
Map <String , String > requestHeaders = this .getRequestHeaders (options );
671
714
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .StoredProcedure ,
@@ -839,6 +882,8 @@ public ResourceResponse<Trigger> createTrigger(String collectionLink, Trigger tr
839
882
throw new IllegalArgumentException ("trigger" );
840
883
}
841
884
885
+ DocumentClient .validateResource (trigger );
886
+
842
887
String path = DocumentClient .joinPath (collectionLink , Paths .TRIGGERS_PATH_SEGMENT );
843
888
Map <String , String > requestHeaders = this .getRequestHeaders (options );
844
889
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Trigger ,
@@ -863,6 +908,8 @@ public ResourceResponse<Trigger> replaceTrigger(Trigger trigger, RequestOptions
863
908
throw new IllegalArgumentException ("trigger" );
864
909
}
865
910
911
+ DocumentClient .validateResource (trigger );
912
+
866
913
String path = DocumentClient .joinPath (trigger .getSelfLink (), null );
867
914
Map <String , String > requestHeaders = this .getRequestHeaders (options );
868
915
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Trigger ,
@@ -1008,6 +1055,8 @@ public ResourceResponse<UserDefinedFunction> createUserDefinedFunction(
1008
1055
throw new IllegalArgumentException ("udf" );
1009
1056
}
1010
1057
1058
+ DocumentClient .validateResource (udf );
1059
+
1011
1060
String path = DocumentClient .joinPath (collectionLink , Paths .USER_DEFINED_FUNCTIONS_PATH_SEGMENT );
1012
1061
Map <String , String > requestHeaders = this .getRequestHeaders (options );
1013
1062
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .UserDefinedFunction ,
@@ -1032,6 +1081,8 @@ public ResourceResponse<UserDefinedFunction> replaceUserDefinedFunction(UserDefi
1032
1081
throw new IllegalArgumentException ("udf" );
1033
1082
}
1034
1083
1084
+ DocumentClient .validateResource (udf );
1085
+
1035
1086
String path = DocumentClient .joinPath (udf .getSelfLink (), null );
1036
1087
Map <String , String > requestHeaders = this .getRequestHeaders (options );
1037
1088
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .UserDefinedFunction ,
@@ -1184,7 +1235,9 @@ public ResourceResponse<Attachment> createAttachment(String documentLink,
1184
1235
if (attachment == null ) {
1185
1236
throw new IllegalArgumentException ("attachment" );
1186
1237
}
1187
-
1238
+
1239
+ DocumentClient .validateResource (attachment );
1240
+
1188
1241
String path = DocumentClient .joinPath (documentLink , Paths .ATTACHMENTS_PATH_SEGMENT );
1189
1242
Map <String , String > requestHeaders = this .getRequestHeaders (options );
1190
1243
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Attachment ,
@@ -1208,6 +1261,8 @@ public ResourceResponse<Attachment> replaceAttachment(Attachment attachment, Req
1208
1261
throw new IllegalArgumentException ("attachment" );
1209
1262
}
1210
1263
1264
+ DocumentClient .validateResource (attachment );
1265
+
1211
1266
String path = DocumentClient .joinPath (attachment .getSelfLink (), null );
1212
1267
Map <String , String > requestHeaders = this .getRequestHeaders (options );
1213
1268
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Attachment ,
@@ -1546,6 +1601,8 @@ public ResourceResponse<User> createUser(String databaseLink, User user, Request
1546
1601
throw new IllegalArgumentException ("user" );
1547
1602
}
1548
1603
1604
+ DocumentClient .validateResource (user );
1605
+
1549
1606
String path = DocumentClient .joinPath (databaseLink , Paths .USERS_PATH_SEGMENT );
1550
1607
Map <String , String > requestHeaders = this .getRequestHeaders (options );
1551
1608
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .User , path , user , requestHeaders );
@@ -1566,6 +1623,8 @@ public ResourceResponse<User> replaceUser(User user, RequestOptions options) thr
1566
1623
throw new IllegalArgumentException ("user" );
1567
1624
}
1568
1625
1626
+ DocumentClient .validateResource (user );
1627
+
1569
1628
String path = DocumentClient .joinPath (user .getSelfLink (), null );
1570
1629
Map <String , String > requestHeaders = this .getRequestHeaders (options );
1571
1630
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .User , path , user , requestHeaders );
@@ -1699,6 +1758,8 @@ public ResourceResponse<Permission> createPermission(String userLink, Permission
1699
1758
throw new IllegalArgumentException ("permission" );
1700
1759
}
1701
1760
1761
+ DocumentClient .validateResource (permission );
1762
+
1702
1763
String path = DocumentClient .joinPath (userLink , Paths .PERMISSIONS_PATH_SEGMENT );
1703
1764
Map <String , String > requestHeaders = this .getRequestHeaders (options );
1704
1765
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Permission ,
@@ -1723,6 +1784,8 @@ public ResourceResponse<Permission> replacePermission(Permission permission, Req
1723
1784
throw new IllegalArgumentException ("permission" );
1724
1785
}
1725
1786
1787
+ DocumentClient .validateResource (permission );
1788
+
1726
1789
String path = DocumentClient .joinPath (permission .getSelfLink (), null );
1727
1790
Map <String , String > requestHeaders = this .getRequestHeaders (options );
1728
1791
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Permission ,
@@ -1862,6 +1925,8 @@ public ResourceResponse<Offer> replaceOffer(Offer offer) throws DocumentClientEx
1862
1925
throw new IllegalArgumentException ("offer" );
1863
1926
}
1864
1927
1928
+ DocumentClient .validateResource (offer );
1929
+
1865
1930
String path = DocumentClient .joinPath (offer .getSelfLink (), null );
1866
1931
DocumentServiceRequest request = DocumentServiceRequest .create (ResourceType .Offer ,
1867
1932
path ,
@@ -2193,4 +2258,17 @@ private static String serializeProcedureParams(Object[] objectArray) {
2193
2258
2194
2259
return String .format ("[%s]" , StringUtils .join (stringArray , "," ));
2195
2260
}
2261
+
2262
+ private static void validateResource (Resource resource ) {
2263
+ if (!StringUtils .isEmpty (resource .getId ())) {
2264
+ if (resource .getId ().indexOf ('/' ) != -1 || resource .getId ().indexOf ('\\' ) != -1 ||
2265
+ resource .getId ().indexOf ('?' ) != -1 || resource .getId ().indexOf ('#' ) != -1 ) {
2266
+ throw new IllegalArgumentException ("Id contains illagel chars." );
2267
+ }
2268
+
2269
+ if (resource .getId ().endsWith (" " )) {
2270
+ throw new IllegalArgumentException ("Id ends with a space." );
2271
+ }
2272
+ }
2273
+ }
2196
2274
}
0 commit comments