Skip to content

Commit 14a36c5

Browse files
authored
Merge pull request #451 from Backendless/vova_ya/20977/Change_signature_for_relation_operations
[BKNDLSS-20977]: Change signature for relation operations
2 parents b028e35 + fcd814c commit 14a36c5

11 files changed

+495
-171
lines changed

src/com/backendless/exceptions/ExceptionMessage.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,12 @@ public static String NULL_FIELD( String field )
164164
public final static String NULL_WHERE_CLAUSE = "WhereClause can not be null";
165165
public final static String NULL_RELATION_COLUMN_NAME = "Relation column name can not be null or empty";
166166
public final static String NULL_PARENT_TABLE_NAME = "Parent table name can not be null or empty";
167-
public final static String LIST_MAP_OR_STRING = "List can be only of objects map or objectIds";
168-
public final static String LIST_MAP_OR_STRING_OR_INSTANCES = "List can be only of objects map or objectIds or instances";
167+
public final static String LIST_NOT_INSTANCES = "Array can be only of instances";
169168
public final static String LIST_OPERATIONS_NULL_EMPTY = "List of operations in unitOfWork can not be null or empty";
170169
public final static String REF_TYPE_NOT_SUPPORT = "This operation result not supported in this operation";
171170
public final static String OP_RESULT_ID_ALREADY_PRESENT = "This opResultId already present. OpResultId must be unique";
172171
public final static String OP_RESULT_INDEX_YES_PROP_NAME_NOT = "This operation result in this operation must resolved only to resultIndex";
173172
public final static String OP_RESULT_FROM_THIS_OPERATION_NOT_SUPPORT_IN_THIS_PLACE = "OpResult/OpResultValueReference from this operation in this place not supported";
173+
174+
public final static String RELATION_USE_LIST_OF_MAPS = "Unable to execute the relation operation. Use the relation method which accepts list of Maps child objects";
174175
}

src/com/backendless/transaction/RelationOperation.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@ interface RelationOperation
99
OpResult addOperation( OperationType operationType, String parentTable, Map<String, Object> parentObject,
1010
String columnName, String[] childrenObjectIds );
1111

12+
// HashMap + array of custom classes
13+
<E> OpResult addOperation( OperationType operationType, String parentTable,
14+
Map<String, Object> parentObject, String columnName, E[] childrenInstances );
15+
1216
// HashMap + List of hashmaps
13-
// HashMap + List of custom classes
14-
<E> OpResult addOperation( OperationType operationType, String parentTable, Map<String, Object> parentObject,
15-
String columnName, List<E> children );
17+
OpResult addOperation( OperationType operationType, String parentTable,
18+
Map<String, Object> parentObject, String columnName, List<Map<String, Object>> childrenMaps );
1619

1720
// HashMap + OpResult=CREATE_BULK or FIND
1821
OpResult addOperation( OperationType operationType, String parentTable, Map<String, Object> parentObject,
@@ -26,10 +29,13 @@ OpResult addOperation( OperationType operationType, String parentTable, Map<Stri
2629
OpResult addOperation( OperationType operationType, String parentTable, String parentObjectId,
2730
String columnName, String[] childrenObjectIds );
2831

29-
// String + List of hashmaps
30-
// String + List of custom classes
32+
// String + array of custom classes
3133
<E> OpResult addOperation( OperationType operationType, String parentTable, String parentObjectId,
32-
String columnName, List<E> children );
34+
String columnName, E[] childrenInstances );
35+
36+
// String + List of hashmaps
37+
OpResult addOperation( OperationType operationType, String parentTable, String parentObjectId,
38+
String columnName, List<Map<String, Object>> childrenMaps );
3339

3440
// String + OpResult=CREATE_BULK or FIND
3541
OpResult addOperation( OperationType operationType, String parentTable, String parentObjectId,
@@ -42,9 +48,11 @@ OpResult addOperation( OperationType operationType, String parentTable, String p
4248
// Custom class + array of objectIds
4349
<E> OpResult addOperation( OperationType operationType, E parentObject, String columnName, String[] childrenObjectIds );
4450

51+
// Custom class + array of custom classes
52+
<E, U> OpResult addOperation( OperationType operationType, E parentObject, String columnName, U[] childrenInstances );
53+
4554
// Custom class + List of hashmaps
46-
// Custom class + List of custom classes
47-
<E, U> OpResult addOperation( OperationType operationType, E parentObject, String columnName, List<U> children );
55+
<E> OpResult addOperation( OperationType operationType, E parentObject, String columnName, List<Map<String, Object>> childrenMaps );
4856

4957
// Custom class + OpResult=CREATE_BULK or FIND
5058
<E> OpResult addOperation( OperationType operationType, E parentObject, String columnName, OpResult children );
@@ -56,10 +64,12 @@ <E> OpResult addOperation( OperationType operationType, E parentObject, String c
5664
// OpResult=CREATE/UPDATE(getObjectId) + array of objectIds
5765
OpResult addOperation( OperationType operationType, OpResult parentObject, String columnName, String[] childrenObjectIds );
5866

67+
// OpResult=CREATE/UPDATE(getObjectId) + array of custom classes
68+
<E> OpResult addOperation( OperationType operationType, OpResult parentObject, String columnName, E[] childrenInstances );
69+
5970
// OpResult=CREATE/UPDATE(getObjectId) + List of hashmaps
60-
// OpResult=CREATE/UPDATE(getObjectId) + List of custom classes
61-
<E> OpResult addOperation( OperationType operationType, OpResult parentObject,
62-
String columnName, List<E> children );
71+
OpResult addOperation( OperationType operationType, OpResult parentObject,
72+
String columnName, List<Map<String, Object>> childrenMaps );
6373

6474
// OpResult=CREATE/UPDATE(getObjectId) + OpResult=CREATE_BULK or FIND
6575
OpResult addOperation( OperationType operationType, OpResult parentObject,
@@ -73,10 +83,13 @@ OpResult addOperation( OperationType operationType, OpResult parentObject,
7383
OpResult addOperation( OperationType operationType, OpResultValueReference parentObject,
7484
String columnName, String[] childrenObjectIds );
7585

76-
// OpResultValueReference=CREATE_BULK/FIND(getObjectId) + List of hashmaps
77-
// OpResultValueReference=CREATE_BULK/FIND(getObjectId)+ List of custom classes
86+
// OpResultValueReference=CREATE_BULK/FIND(getObjectId)+ array of custom classes
7887
<E> OpResult addOperation( OperationType operationType, OpResultValueReference parentObject,
79-
String columnName, List<E> children );
88+
String columnName, E[] childrenInstances );
89+
90+
// OpResultValueReference=CREATE_BULK/FIND(getObjectId) + List of hashmaps
91+
OpResult addOperation( OperationType operationType, OpResultValueReference parentObject,
92+
String columnName, List<Map<String, Object>> childrenMaps );
8093

8194
// OpResultValueReference=CREATE_BULK/FIND(getObjectId) + OpResult=CREATE_BULK or FIND
8295
OpResult addOperation( OperationType operationType, OpResultValueReference parentObject,

src/com/backendless/transaction/RelationOperationImpl.java

Lines changed: 119 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,27 @@ public OpResult addOperation( OperationType operationType, String parentTable, M
3737

3838
@Override
3939
public <E> OpResult addOperation( OperationType operationType, String parentTable,
40-
Map<String, Object> parentObject, String columnName, List<E> children )
40+
Map<String, Object> parentObject, String columnName, E[] childrenInstances )
4141
{
42+
if( childrenInstances == null || childrenInstances.length == 0 )
43+
throw new IllegalArgumentException( ExceptionMessage.NULL_EMPTY_BULK );
44+
45+
if( childrenInstances[ 0 ] instanceof String )
46+
{
47+
String[] childrenObjectIds = (String[]) childrenInstances;
48+
return addOperation( operationType, parentTable, parentObject, columnName, childrenObjectIds );
49+
}
50+
4251
String parentObjectId = TransactionHelper.convertObjectMapToObjectId( parentObject );
43-
return addOperation( operationType, parentTable, parentObjectId, columnName, children );
52+
return addOperation( operationType, parentTable, parentObjectId, columnName, childrenInstances );
53+
}
54+
55+
@Override
56+
public OpResult addOperation( OperationType operationType, String parentTable,
57+
Map<String, Object> parentObject, String columnName, List<Map<String, Object>> childrenMaps )
58+
{
59+
String parentObjectId = TransactionHelper.convertObjectMapToObjectId( parentObject );
60+
return addOperation( operationType, parentTable, parentObjectId, columnName, childrenMaps );
4461
}
4562

4663
@Override
@@ -71,9 +88,28 @@ public OpResult addOperation( OperationType operationType, String parentTable, S
7188

7289
@Override
7390
public <E> OpResult addOperation( OperationType operationType, String parentTable, String parentObjectId,
74-
String columnName, List<E> children )
91+
String columnName, E[] childrenInstances )
92+
{
93+
if( childrenInstances == null || childrenInstances.length == 0 )
94+
throw new IllegalArgumentException( ExceptionMessage.NULL_EMPTY_BULK );
95+
96+
if( childrenInstances[ 0 ] instanceof String )
97+
{
98+
String[] childrenObjectIds = (String[]) childrenInstances;
99+
return addOperation( operationType, parentTable, parentObjectId, columnName, childrenObjectIds );
100+
}
101+
102+
List<String> childrenIds = getChildrenFromArrayInstances( childrenInstances );
103+
104+
return addOperation( operationType, parentTable, parentObjectId, columnName,
105+
null, childrenIds );
106+
}
107+
108+
@Override
109+
public OpResult addOperation( OperationType operationType, String parentTable, String parentObjectId,
110+
String columnName, List<Map<String, Object>> childrenMaps )
75111
{
76-
List<Object> childrenIds = getChildrenFromList( children );
112+
List<Object> childrenIds = getChildrenFromListMap( childrenMaps );
77113

78114
return addOperation( operationType, parentTable, parentObjectId, columnName,
79115
null, childrenIds );
@@ -111,13 +147,32 @@ public <E> OpResult addOperation( OperationType operationType, E parentObject, S
111147
}
112148

113149
@Override
114-
public <E, U> OpResult addOperation( OperationType operationType, E parentObject, String columnName,
115-
List<U> children )
150+
public <E, U> OpResult addOperation( OperationType operationType, E parentObject, String columnName, U[] childrenInstances )
116151
{
152+
if( childrenInstances == null || childrenInstances.length == 0 )
153+
throw new IllegalArgumentException( ExceptionMessage.NULL_EMPTY_BULK );
154+
155+
if( childrenInstances[ 0 ] instanceof String )
156+
{
157+
String[] childrenObjectIds = (String[]) childrenInstances;
158+
return addOperation( operationType, parentObject, columnName, childrenObjectIds );
159+
}
160+
117161
String parentObjectId = getParentObjectIdFromInstance( parentObject );
118162
String parentTable = BackendlessSerializer.getSimpleName( parentObject.getClass() );
119163

120-
List<Object> childrenIds = getChildrenFromList( children );
164+
List<String> childrenIds = getChildrenFromArrayInstances( childrenInstances );
165+
166+
return addOperation( operationType, parentTable, parentObjectId, columnName, null, childrenIds );
167+
}
168+
169+
@Override
170+
public <E> OpResult addOperation( OperationType operationType, E parentObject, String columnName, List<Map<String, Object>> childrenMaps )
171+
{
172+
String parentObjectId = getParentObjectIdFromInstance( parentObject );
173+
String parentTable = BackendlessSerializer.getSimpleName( parentObject.getClass() );
174+
175+
List<Object> childrenIds = getChildrenFromListMap( childrenMaps );
121176

122177
return addOperation( operationType, parentTable, parentObjectId, columnName, null, childrenIds );
123178
}
@@ -158,12 +213,33 @@ public OpResult addOperation( OperationType operationType, OpResult parentObject
158213
}
159214

160215
@Override
161-
public <E> OpResult addOperation( OperationType operationType, OpResult parentObject,
162-
String columnName, List<E> children )
216+
public <E> OpResult addOperation( OperationType operationType, OpResult parentObject, String columnName, E[] childrenInstances )
163217
{
218+
if( childrenInstances == null || childrenInstances.length == 0 )
219+
throw new IllegalArgumentException( ExceptionMessage.NULL_EMPTY_BULK );
220+
221+
if( childrenInstances[ 0 ] instanceof String )
222+
{
223+
String[] childrenObjectIds = (String[]) childrenInstances;
224+
return addOperation( operationType, parentObject, columnName, childrenObjectIds );
225+
}
226+
164227
checkOpResultFoParent( parentObject );
165228

166-
List<Object> childrenIds = getChildrenFromList( children );
229+
List<String> childrenIds = getChildrenFromArrayInstances( childrenInstances );
230+
231+
return addOperation( operationType, parentObject.getTableName(),
232+
parentObject.resolveTo( Persistence.DEFAULT_OBJECT_ID_FIELD ).makeReference(),
233+
columnName, null, childrenIds );
234+
}
235+
236+
@Override
237+
public OpResult addOperation( OperationType operationType, OpResult parentObject,
238+
String columnName, List<Map<String, Object>> childrenMaps )
239+
{
240+
checkOpResultFoParent( parentObject );
241+
242+
List<Object> childrenIds = getChildrenFromListMap( childrenMaps );
167243

168244
return addOperation( operationType, parentObject.getTableName(),
169245
parentObject.resolveTo( Persistence.DEFAULT_OBJECT_ID_FIELD ).makeReference(),
@@ -209,11 +285,32 @@ public OpResult addOperation( OperationType operationType, OpResultValueReferenc
209285

210286
@Override
211287
public <E> OpResult addOperation( OperationType operationType, OpResultValueReference parentObject,
212-
String columnName, List<E> children )
288+
String columnName, E[] childrenInstances )
289+
{
290+
if( childrenInstances == null || childrenInstances.length == 0 )
291+
throw new IllegalArgumentException( ExceptionMessage.NULL_EMPTY_BULK );
292+
293+
if( childrenInstances[ 0 ] instanceof String )
294+
{
295+
String[] childrenObjectIds = (String[]) childrenInstances;
296+
return addOperation( operationType, parentObject, columnName, childrenObjectIds );
297+
}
298+
299+
Map<String, Object> referenceToObjectId = getReferenceToParentFromOpResultValue( parentObject );
300+
301+
List<String> childrenIds = getChildrenFromArrayInstances( childrenInstances );
302+
303+
return addOperation( operationType, parentObject.getOpResult().getTableName(), referenceToObjectId, columnName,
304+
null, childrenIds );
305+
}
306+
307+
@Override
308+
public OpResult addOperation( OperationType operationType, OpResultValueReference parentObject,
309+
String columnName, List<Map<String, Object>> childrenMaps )
213310
{
214311
Map<String, Object> referenceToObjectId = getReferenceToParentFromOpResultValue( parentObject );
215312

216-
List<Object> childrenIds = getChildrenFromList( children );
313+
List<Object> childrenIds = getChildrenFromListMap( childrenMaps );
217314

218315
return addOperation( operationType, parentObject.getOpResult().getTableName(), referenceToObjectId, columnName,
219316
null, childrenIds );
@@ -313,14 +410,19 @@ private void checkOpResultForChildren( OpResult children )
313410
throw new IllegalArgumentException( ExceptionMessage.REF_TYPE_NOT_SUPPORT );
314411
}
315412

316-
private <E> List<Object> getChildrenFromList( List<E> children )
413+
private List<Object> getChildrenFromListMap( List<Map<String, Object>> childrenMaps )
317414
{
318-
319-
if( children == null || children.isEmpty() )
415+
if( childrenMaps == null || childrenMaps.isEmpty() )
320416
throw new IllegalArgumentException( ExceptionMessage.NULL_EMPTY_BULK );
321417

322-
TransactionHelper.makeReferenceToObjectIdFromOpResult( (List<Object>) children );
418+
return TransactionHelper.convertMapsToObjectIds( childrenMaps );
419+
}
420+
421+
private <E> List<String> getChildrenFromArrayInstances( E[] children )
422+
{
423+
if( children == null || children.length == 0 )
424+
throw new IllegalArgumentException( ExceptionMessage.NULL_EMPTY_BULK );
323425

324-
return TransactionHelper.getObjectIdsFromUnknownList( children );
426+
return TransactionHelper.getObjectIdsFromListInstances( children );
325427
}
326428
}

0 commit comments

Comments
 (0)