Skip to content

Commit f10abaa

Browse files
committed
Exceptions and Errors
1 parent 94b89c9 commit f10abaa

File tree

2 files changed

+38
-29
lines changed

2 files changed

+38
-29
lines changed

Templates/CSharp/Base/CollectionRequest.Base.template.tt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,19 +136,23 @@ public string GetPostAsyncMethodForReferencesRequest(OdcmProperty odcmProperty,
136136
var sanitizedPropertyName = odcmProperty.Projection.Type.Name.GetSanitizedPropertyName(odcmProperty.Name);
137137
var propertyType = this.GetPropertyTypeName(odcmProperty, @namespace);
138138

139+
var serviceExceptionTypeName = @namespace.GetMiddlewareTypeName("ServiceException");
140+
var errorTypeName = @namespace.GetMiddlewareTypeName("Error");
141+
var referenceRequestBodyTypeName = @namespace.GetMiddlewareTypeName("ReferenceRequestBody");
142+
139143
var templateWriterHost = (CustomT4Host)Host;
140144
var templateWriter = (CodeWriterCSharp)templateWriterHost.CodeWriter;
141145

142146
var serviceNavigationProperty = odcmProperty.GetServiceCollectionNavigationPropertyForPropertyType();
143147
if (serviceNavigationProperty == null)
144148
return string.Empty;
145-
149+
146150
var implicitNavigationProperty = string.Empty;
147-
148-
// If the odcmProperty is a part of Singleton, then we need to determine whether there is a
149-
// NavigationPropertyBinding generation hint. If there is, then we need to use it for
150-
// creating the URL of a reference entity in a POST body.
151-
if (serviceNavigationProperty.GetType() == typeof(OdcmSingleton))
151+
152+
// If the odcmProperty is a part of Singleton, then we need to determine whether there is a
153+
// NavigationPropertyBinding generation hint. If there is, then we need to use it for
154+
// creating the URL of a reference entity in a POST body.
155+
if (serviceNavigationProperty.GetType() == typeof(OdcmSingleton))
152156
implicitNavigationProperty = "/" + odcmProperty.GetImplicitPropertyName((OdcmSingleton)serviceNavigationProperty);
153157

154158
var stringBuilder = new StringBuilder();
@@ -186,12 +190,12 @@ public string GetPostAsyncMethodForReferencesRequest(OdcmProperty odcmProperty,
186190
stringBuilder.Append(Environment.NewLine);
187191
stringBuilder.Append(" {");
188192
stringBuilder.Append(Environment.NewLine);
189-
stringBuilder.Append(" throw new ServiceException(new Error { Code = \"invalidRequest\", Message = \"ID is required to add a reference.\" });");
193+
stringBuilder.AppendFormat(" throw new {0}(new {1} { Code = \"invalidRequest\", Message = \"ID is required to add a reference.\" });", serviceExceptionTypeName, errorTypeName);
190194
stringBuilder.Append(Environment.NewLine);
191195
stringBuilder.Append(" }");
192196
stringBuilder.Append(Environment.NewLine);
193197
stringBuilder.Append(Environment.NewLine);
194-
stringBuilder.AppendFormat(" var requestBody = new ReferenceRequestBody {{ ODataId = string.Format(\"{{0}}/{0}{1}/{{1}}\", this.Client.BaseUrl, {2}.Id) }};", serviceNavigationProperty.Name, implicitNavigationProperty, sanitizedPropertyName);
198+
stringBuilder.AppendFormat(" var requestBody = new {0} {{ ODataId = string.Format(\"{{1}}/{1}{2}/{{2}}\", this.Client.BaseUrl, {2}.Id) }};", referenceRequestBodyTypeName, serviceNavigationProperty.Name, implicitNavigationProperty, sanitizedPropertyName);
195199
stringBuilder.Append(Environment.NewLine);
196200
stringBuilder.AppendFormat(" return this.SendAsync(requestBody, cancellationToken);");
197201
stringBuilder.Append(Environment.NewLine);

Templates/CSharp/Base/EntityRequest.Base.template.tt

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public string GetEntityCreateAsyncMethod(OdcmClass odcmClass, bool initializeCol
204204
var templateWriter = (CodeWriterCSharp)templateWriterHost.CodeWriter;
205205

206206
var entityName = this.GetEntityNameString(odcmClass);
207-
207+
208208
// Special case for when an entity name ends with "Request". Associated with the change in EntityType.cs.tt
209209
if (entityName.EndsWith("Request"))
210210
{
@@ -245,7 +245,7 @@ public string GetEntityCreateAsyncMethod(OdcmClass odcmClass, bool initializeCol
245245
}
246246
stringBuilder.Append(@" return newEntity;
247247
}");
248-
248+
249249

250250
return stringBuilder.ToString();
251251
}
@@ -361,6 +361,11 @@ public void AppendUpdateAsyncHeader(string entityName, string lowerCaseEntityNam
361361
public string GetEntityUpdateAsyncMethod(OdcmClass odcmClass, bool initializeCollectionProperties = true)
362362
{
363363
var stringBuilder = new StringBuilder();
364+
var @namespace = odcmClass.GetNamespaceName();
365+
var clientExceptionTypeName = @namespace.GetMiddlewareTypeName("ClientException");
366+
var errorTypeName = @namespace.GetMiddlewareTypeName("Error");
367+
var generatedErrorConstantsTypeName = @namespace.GetMiddlewareTypeName("GeneratedErrorConstants");
368+
var constantsTypeName = @namespace.GetMiddlewareTypeName("Constants");
364369

365370
var entityName = this.GetEntityNameString(odcmClass);
366371

@@ -397,27 +402,27 @@ public string GetEntityUpdateAsyncMethod(OdcmClass odcmClass, bool initializeCol
397402
stringBuilder.Append(Environment.NewLine);
398403
stringBuilder.Append(" {");
399404
stringBuilder.Append(Environment.NewLine);
400-
stringBuilder.AppendFormat(" if ({0}ToUpdate.AdditionalData.ContainsKey(Constants.HttpPropertyNames.ResponseHeaders) ||", lowerCaseEntityName);
401-
stringBuilder.Append(Environment.NewLine);
402-
stringBuilder.AppendFormat(" {0}ToUpdate.AdditionalData.ContainsKey(Constants.HttpPropertyNames.StatusCode))", lowerCaseEntityName);
405+
stringBuilder.AppendFormat(" if ({0}ToUpdate.AdditionalData.ContainsKey({1}.HttpPropertyNames.ResponseHeaders) ||", lowerCaseEntityName, constantsTypeName);
406+
stringBuilder.Append(Environment.NewLine);
407+
stringBuilder.AppendFormat(" {0}ToUpdate.AdditionalData.ContainsKey({1}.HttpPropertyNames.StatusCode))", lowerCaseEntityName, constantsTypeName);
403408
stringBuilder.Append(Environment.NewLine);
404-
stringBuilder.Append(" {");
409+
stringBuilder.Append(" {");
405410
stringBuilder.Append(Environment.NewLine);
406-
stringBuilder.Append(" throw new ClientException(");
411+
stringBuilder.AppendFormat(" throw new {0}(", clientExceptionTypeName);
407412
stringBuilder.Append(Environment.NewLine);
408-
stringBuilder.Append(" new Error");
413+
stringBuilder.AppendFormat(" new {0}", errorTypeName);
409414
stringBuilder.Append(Environment.NewLine);
410-
stringBuilder.Append(" {");
415+
stringBuilder.Append(" {");
411416
stringBuilder.Append(Environment.NewLine);
412-
stringBuilder.Append(" Code = GeneratedErrorConstants.Codes.NotAllowed,");
417+
stringBuilder.AppendFormat(" Code = {0}.Codes.NotAllowed,", generatedErrorConstantsTypeName);
413418
stringBuilder.Append(Environment.NewLine);
414-
stringBuilder.AppendFormat(" Message = String.Format(GeneratedErrorConstants.Messages.ResponseObjectUsedForUpdate, {0}ToUpdate.GetType().Name)", lowerCaseEntityName);
419+
stringBuilder.AppendFormat(" Message = String.Format({0}.Messages.ResponseObjectUsedForUpdate, {1}ToUpdate.GetType().Name)", generatedErrorConstantsTypeName, lowerCaseEntityName);
415420
stringBuilder.Append(Environment.NewLine);
416-
stringBuilder.Append(" });");
421+
stringBuilder.Append(" });");
417422
stringBuilder.Append(Environment.NewLine);
418-
stringBuilder.Append(" }");
423+
stringBuilder.Append(" }");
419424
stringBuilder.Append(Environment.NewLine);
420-
stringBuilder.Append(" }");
425+
stringBuilder.Append(" }");
421426
stringBuilder.Append(Environment.NewLine);
422427
stringBuilder.AppendFormat(" if ({0}ToUpdate.AdditionalData != null)", lowerCaseEntityName);
423428
stringBuilder.Append(Environment.NewLine);
@@ -429,21 +434,21 @@ public string GetEntityUpdateAsyncMethod(OdcmClass odcmClass, bool initializeCol
429434
stringBuilder.Append(Environment.NewLine);
430435
stringBuilder.Append(" {");
431436
stringBuilder.Append(Environment.NewLine);
432-
stringBuilder.Append(" throw new ClientException(");
437+
stringBuilder.AppendFormat(" throw new {0}(", clientExceptionTypeName);
433438
stringBuilder.Append(Environment.NewLine);
434-
stringBuilder.Append(" new Error");
439+
stringBuilder.AppendFormat(" new {0}", errorTypeName);
435440
stringBuilder.Append(Environment.NewLine);
436441
stringBuilder.Append(" {");
437442
stringBuilder.Append(Environment.NewLine);
438-
stringBuilder.Append(" Code = GeneratedErrorConstants.Codes.NotAllowed,");
443+
stringBuilder.AppendFormat(" Code = {0}.Codes.NotAllowed,", generatedErrorConstantsTypeName);
439444
stringBuilder.Append(Environment.NewLine);
440-
stringBuilder.AppendFormat(" Message = String.Format(GeneratedErrorConstants.Messages.ResponseObjectUsedForUpdate, {0}ToUpdate.GetType().Name)", lowerCaseEntityName);
445+
stringBuilder.AppendFormat(" Message = String.Format({0}.Messages.ResponseObjectUsedForUpdate, {1}ToUpdate.GetType().Name)", generatedErrorConstantsTypeName, lowerCaseEntityName);
441446
stringBuilder.Append(Environment.NewLine);
442447
stringBuilder.Append(" });");
443448
stringBuilder.Append(Environment.NewLine);
444449
stringBuilder.Append(" }");
445450
stringBuilder.Append(Environment.NewLine);
446-
stringBuilder.Append(" }");
451+
stringBuilder.Append(" }");
447452
stringBuilder.Append(Environment.NewLine);
448453
stringBuilder.AppendFormat(" this.ContentType = \"{0}\";", templateWriter.jsonContentType);
449454
stringBuilder.Append(Environment.NewLine);
@@ -530,7 +535,7 @@ public string GetSelectExpressionMethod(string requestType, string underlyingTyp
530535
}
531536
return this;
532537
}");
533-
538+
534539
return stringBuilder.ToString();
535540
}
536541

@@ -571,7 +576,7 @@ public string GetExpandExpressionMethod(string requestType, string underlyingTyp
571576
}
572577
return this;
573578
}");
574-
579+
575580
return stringBuilder.ToString();
576581
}
577582

0 commit comments

Comments
 (0)