da0026a19482c3af224d5631187e9e8c5b5d78da
[integration.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * PNF-REGISTRATION-HANDLER
4  * ================================================================================
5  * Copyright (C) 2018 Nokia. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.pnfsimulator.simulator;
21
22 import com.google.gson.stream.JsonReader;
23 import com.google.gson.stream.JsonToken;
24 import com.google.gson.stream.JsonWriter;
25 import java.io.IOException;
26 import java.math.BigDecimal;
27 import java.util.Arrays;
28 import java.util.stream.Collectors;
29
30 public enum JsonTokenProcessor {
31     STRING(JsonToken.STRING) {
32         @Override
33         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
34                 throws IOException {
35             String originalString = reader.nextString();
36             if (keywordsExtractor.isPrimitive(originalString)) {
37                 writer.value(keywordsExtractor.substitutePrimitiveKeyword(originalString));
38             } else {
39                 String possibleSubstitution = Arrays.stream(originalString.split(" "))
40                     .map(singleWord -> keywordsExtractor.substituteStringKeyword(singleWord, incrementValue)).collect(
41                         Collectors.joining(" "));
42                 writer.value(originalString.equals(possibleSubstitution) ? originalString : possibleSubstitution);
43             }
44         }
45     },
46     BEGIN_ARRAY(JsonToken.BEGIN_ARRAY) {
47         @Override
48         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
49                 throws IOException {
50             reader.beginArray();
51             writer.beginArray();
52         }
53     },
54     END_ARRAY(JsonToken.END_ARRAY) {
55         @Override
56         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
57                 throws IOException {
58             reader.endArray();
59             writer.endArray();
60         }
61     },
62     BEGIN_OBJECT(JsonToken.BEGIN_OBJECT) {
63         @Override
64         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
65                 throws IOException {
66             reader.beginObject();
67             writer.beginObject();
68         }
69     },
70     END_OBJECT(JsonToken.END_OBJECT) {
71         @Override
72         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
73                 throws IOException {
74             reader.endObject();
75             writer.endObject();
76         }
77     },
78     NAME(JsonToken.NAME) {
79         @Override
80         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
81                 throws IOException {
82             writer.name(reader.nextName());
83         }
84     },
85     NUMBER(JsonToken.NUMBER) {
86         @Override
87         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
88                 throws IOException {
89             writer.value(new BigDecimal(reader.nextString()));
90         }
91     },
92     BOOLEAN(JsonToken.BOOLEAN) {
93         @Override
94         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
95                 throws IOException {
96             writer.value(reader.nextBoolean());
97         }
98     },
99     NULL(JsonToken.NULL) {
100         @Override
101         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
102                 throws IOException {
103             reader.nextNull();
104             writer.nullValue();
105         }
106     },
107     END_DOCUMENT(JsonToken.END_DOCUMENT) {
108         @Override
109         void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
110                 throws IOException {
111             // do nothing
112         }
113     };
114
115     private JsonToken jsonToken;
116
117     JsonTokenProcessor(JsonToken jsonToken) {
118         this.jsonToken = jsonToken;
119     }
120
121     boolean isProcessorFor(JsonToken jsonToken) {
122         return this.jsonToken == jsonToken;
123     }
124
125     abstract void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor) throws IOException;
126
127     private static final String INVALID_JSON_BODY_UNSUPPORTED_JSON_TOKEN = "Invalid json body. Unsupported JsonToken.";
128
129     static JsonTokenProcessor getProcessorFor(JsonToken jsonToken) throws IOException {
130         return Arrays.stream(JsonTokenProcessor.values()).filter(processor -> processor.isProcessorFor(jsonToken)).findFirst()
131                 .orElseThrow(() -> new IOException(INVALID_JSON_BODY_UNSUPPORTED_JSON_TOKEN));
132     }
133
134 }