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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
20 package org.onap.pnfsimulator.simulator;
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;
30 public enum JsonTokenProcessor {
31 STRING(JsonToken.STRING) {
33 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
35 String originalString = reader.nextString();
36 if (keywordsExtractor.isPrimitive(originalString)) {
37 writer.value(keywordsExtractor.substitutePrimitiveKeyword(originalString));
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);
46 BEGIN_ARRAY(JsonToken.BEGIN_ARRAY) {
48 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
54 END_ARRAY(JsonToken.END_ARRAY) {
56 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
62 BEGIN_OBJECT(JsonToken.BEGIN_OBJECT) {
64 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
70 END_OBJECT(JsonToken.END_OBJECT) {
72 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
78 NAME(JsonToken.NAME) {
80 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
82 writer.name(reader.nextName());
85 NUMBER(JsonToken.NUMBER) {
87 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
89 writer.value(new BigDecimal(reader.nextString()));
92 BOOLEAN(JsonToken.BOOLEAN) {
94 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
96 writer.value(reader.nextBoolean());
99 NULL(JsonToken.NULL) {
101 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
107 END_DOCUMENT(JsonToken.END_DOCUMENT) {
109 void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor)
115 private JsonToken jsonToken;
117 JsonTokenProcessor(JsonToken jsonToken) {
118 this.jsonToken = jsonToken;
121 boolean isProcessorFor(JsonToken jsonToken) {
122 return this.jsonToken == jsonToken;
125 abstract void process(JsonReader reader, JsonWriter writer, int incrementValue, KeywordsExtractor keywordsExtractor) throws IOException;
127 private static final String INVALID_JSON_BODY_UNSUPPORTED_JSON_TOKEN = "Invalid json body. Unsupported JsonToken.";
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));