aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/services/http-error-interceptor.ts
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-ui/src/app/services/http-error-interceptor.ts')
-rw-r--r--catalog-ui/src/app/services/http-error-interceptor.ts99
1 files changed, 99 insertions, 0 deletions
diff --git a/catalog-ui/src/app/services/http-error-interceptor.ts b/catalog-ui/src/app/services/http-error-interceptor.ts
new file mode 100644
index 0000000000..b61091c37c
--- /dev/null
+++ b/catalog-ui/src/app/services/http-error-interceptor.ts
@@ -0,0 +1,99 @@
+'use strict';
+import {IServerMessageModalModel} from "../view-models/modals/message-modal/message-server-modal/server-message-modal-view-model";
+import {SEVERITY} from "../utils/constants";
+import 'app/utils/prototypes.ts';
+
+export class HttpErrorInterceptor {
+ public static $inject = ['$injector', '$q'];
+
+ public static Factory($injector:ng.auto.IInjectorService, $q:angular.IQService) {
+ return new HttpErrorInterceptor($injector, $q);
+ }
+
+ constructor(private $injector:ng.auto.IInjectorService, private $q:angular.IQService) {
+ }
+
+ public formatMessageArrays = (message:string, variables:Array<string>)=> {
+ return message.replace(/\[%(\d+)\]/g, function (_, m) {
+ let tmp = [];
+ let list = variables[--m].split(";");
+ list.forEach(function (item) {
+ tmp.push("<li>" + item + "</li>");
+ });
+ return "<ul>" + tmp.join("") + "</ul>";
+ });
+ };
+
+ public responseError = (rejection:any)=> {
+
+ let text:string;
+ let variables;
+ let messageId:string = "";
+ let isKnownException = false;
+
+ if (rejection.data && rejection.data.serviceException) {
+ text = rejection.data.serviceException.text;
+ variables = rejection.data.serviceException.variables;
+ messageId = rejection.data.serviceException.messageId;
+ isKnownException = true;
+ } else if (rejection.data && rejection.data.requestError && rejection.data.requestError.serviceException) {
+ text = rejection.data.requestError.serviceException.text;
+ variables = rejection.data.requestError.serviceException.variables;
+ messageId = rejection.data.requestError.serviceException.messageId;
+ isKnownException = true;
+ } else if (rejection.data && rejection.data.requestError && rejection.data.requestError.policyException) {
+ text = rejection.data.requestError.policyException.text;
+ variables = rejection.data.requestError.policyException.variables;
+ messageId = rejection.data.requestError.policyException.messageId;
+ isKnownException = true;
+ } else if (rejection.data) {
+ text = 'Wrong error format from server';
+ console.error(text);
+ isKnownException = false;
+ }
+
+ let data:IServerMessageModalModel;
+ if (isKnownException) {
+ // Remove the "Error: " text at the begining
+ if (text.trim().indexOf("Error:") === 0) {
+ text = text.replace("Error:", "").trim();
+ }
+
+ //mshitrit DE199895 bug fix
+ let count:number = 0;
+ variables.forEach(function (item) {
+ variables[count] = item ? item.replace('<', '&lt').replace('>', '&gt') : '';
+ count++;
+ });
+
+ // Format the message in case has array to <ul><li>
+ text = this.formatMessageArrays(text, variables);
+
+ // Format the message %1 %2
+ text = text.format(variables);
+
+ // Need to inject the MessageService manually to prevent circular dependencies (because MessageService use $templateCache that use $http).
+ data = {
+ title: 'Error',
+ message: text,
+ messageId: messageId,
+ status: rejection.status,
+ severity: SEVERITY.ERROR
+ };
+ } else {
+ // Need to inject the MessageService manually to prevent circular dependencies (because MessageService use $templateCache that use $http).
+ data = {
+ title: 'Error',
+ message: rejection.status !== -1 ? rejection.statusText : "Error getting response from server",
+ messageId: messageId,
+ status: rejection.status,
+ severity: SEVERITY.ERROR
+ };
+ }
+
+ let modalsHandler = this.$injector.get('ModalsHandler');
+ modalsHandler.openServerMessageModal(data);
+
+ return this.$q.reject(rejection);
+ }
+}