aboutsummaryrefslogtreecommitdiffstats
path: root/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util
diff options
context:
space:
mode:
Diffstat (limited to 'dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util')
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelIOUtils.java137
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelJsonUtils.java104
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java112
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/CommonEventFormatModule.java84
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAFacadeModelModule.java49
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAPolicyModule.java61
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/BaseDynamicPropertiesProviderMixin.java61
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/JsonMixin.java31
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertActionMixin.java30
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertTypeMixin.java74
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/BaseCEFModelMixin.java33
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CommonEventHeaderMixin.java27
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CriticalityMixin.java30
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventListenerMixin.java31
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventMixin.java31
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventSeverityMixin.java30
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/MeasurementsForVfScalingFieldsMixin.java39
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PerformanceCounterMixin.java29
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PriorityMixin.java30
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/ThresholdCrossingAlertFieldsMixin.java29
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/VNicUsageArrayMixin.java48
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/AAIMixin.java55
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/VESCEFMessageResponseMixin.java56
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/BaseTCAPolicyModelMixin.java30
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/DirectionMixin.java30
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/MetricsPerFunctionalRoleMixin.java28
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixin.java28
-rw-r--r--dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/ThresholdMixin.java44
28 files changed, 1371 insertions, 0 deletions
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelIOUtils.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelIOUtils.java
new file mode 100644
index 0000000..d6d5dc2
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelIOUtils.java
@@ -0,0 +1,137 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
+/**
+ * Utility class containing methods for IO related operations
+ * <p>
+ * @author Rajiv Singla . Creation Date: 10/17/2016.
+ */
+public abstract class AnalyticsModelIOUtils extends AnalyticsModelJsonUtils {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AnalyticsModelIOUtils.class);
+
+ /**
+ * Parses given valid JSON file Location to object of given binding class type.
+ *
+ * @param fileLocation valid JSON File Location
+ * @param bindingClass class Type of Binding object
+ *
+ * @param <T> binding Class Type
+ *
+ * @return binding Class Object which properties populated from JSON File Location
+ */
+ public static final <T> T convertToJsonObject(String fileLocation, Class<T> bindingClass) {
+
+ // Load Resource from give path
+ final InputStream resourceAsStream = loadResourceAsStream(fileLocation);
+
+ // If resource is null throw an exception
+ if (resourceAsStream == null) {
+ final String errorMessage = String.format("Invalid File location: %s", fileLocation);
+ throw new RuntimeException(errorMessage, new FileNotFoundException(errorMessage));
+ }
+
+ // Parse input stream
+ try (InputStreamReader inputStreamReader = new InputStreamReader(resourceAsStream, Charset.forName("UTF-8"))) {
+
+ return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStreamReader, bindingClass);
+
+ } catch (JsonMappingException | JsonParseException e) {
+
+ // If parsing fails due to Invalid Json or Json IO Issues throw an exception
+ final String errorMessage = String.format("Json parsing error while parsing Json File location: %s",
+ fileLocation);
+
+ LOG.error(errorMessage);
+ throw new RuntimeException(errorMessage, e);
+
+ } catch (IOException e) {
+
+ // If parsing fails due to IO Issues throw an exception
+ final String errorMessage = String.format("IO Error while parsing Json File location: %s", fileLocation);
+ LOG.error(errorMessage);
+ throw new RuntimeException(errorMessage, e);
+
+ }
+
+ }
+
+ /**
+ * Loads properties from a given file location. Throws {@link RuntimeException} if file location is invalid
+ * or there were exception when loading properties
+ *
+ * @param propertiesFileLocation path string for properties file
+ * @param properties properties object that needs to be populated with give file properties
+ *
+ * @return properties object with populated properties from properties file
+ *
+ */
+ public static Properties loadPropertiesFile(String propertiesFileLocation, final Properties properties) {
+
+ // Load Resource from give properties file path
+ final InputStream propertiesFileInputStream = loadResourceAsStream(propertiesFileLocation);
+
+ // If properties file is not present throw an exception
+ if (propertiesFileInputStream == null) {
+ final String errorMessage = String.format("Invalid Properties File at location: %s",
+ propertiesFileLocation);
+ throw new RuntimeException(errorMessage, new FileNotFoundException(errorMessage));
+ }
+
+ try {
+ properties.load(propertiesFileInputStream);
+ } catch (IOException e) {
+ final String errorMessage = String.format("IO Exception while reading Properties File at location: %s",
+ propertiesFileLocation);
+ throw new RuntimeException(errorMessage, e);
+ }
+
+ return properties;
+
+ }
+
+ /**
+ * Loads Input file from the given classpath file location and returns file InputStream
+ *
+ * @param fileLocation classpath file location
+ *
+ * @return {@link InputStream} for classpath file
+ */
+ public static InputStream loadResourceAsStream(String fileLocation) {
+ // Load Resource from give path
+ return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileLocation);
+ }
+
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelJsonUtils.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelJsonUtils.java
new file mode 100644
index 0000000..f6b9dc9
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/AnalyticsModelJsonUtils.java
@@ -0,0 +1,104 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Suppliers;
+import org.openecomp.dcae.apod.analytics.model.util.json.AnalyticsModelObjectMapperSupplier;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/7/2016.
+ */
+public abstract class AnalyticsModelJsonUtils {
+
+ /**
+ * Object mapper to be used for all TCA Json Parsing
+ */
+ protected static final ObjectMapper ANALYTICS_MODEL_OBJECT_MAPPER =
+ Suppliers.memoize(new AnalyticsModelObjectMapperSupplier()).get();
+
+
+ /**
+ * Converts Input Stream to given type reference object
+ *
+ * @param inputStream input stream
+ * @param valueTypeRef type reference
+ * @param <T> type of type reference
+ *
+ * @return parsed json object
+ *
+ * @throws IOException IO Exception
+ */
+ public static <T> T readValue(InputStream inputStream, TypeReference<T> valueTypeRef) throws IOException {
+ return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStream, valueTypeRef);
+ }
+
+
+ /**
+ * Converts Input Stream to given target class object
+ *
+ * @param inputStream input stream
+ * @param targetClass target class type
+ * @param <T> type of class
+ *
+ * @return parsed json object
+ *
+ * @throws IOException IO Exception
+ */
+ public static <T> T readValue(InputStream inputStream, Class<T> targetClass) throws IOException {
+ return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(inputStream, targetClass);
+ }
+
+
+ /**
+ * Converts given object to JSON string
+ *
+ * @param value object that needs to converted to json string
+ *
+ * @return json string
+ * @throws JsonProcessingException Json Processing exception
+ */
+ public static String writeValueAsString(Object value) throws JsonProcessingException {
+ return ANALYTICS_MODEL_OBJECT_MAPPER.writeValueAsString(value);
+ }
+
+
+ /**
+ * Method to deserialize JSON content from given JSON content String.
+ *
+ * @param jsonString JSON String
+ * @param objectClass target object class
+ * @param <T> object class type
+ *
+ * @return converted Object from JSON String
+ *
+ * @throws IOException IO Exception
+ */
+ public static <T> T readValue(final String jsonString, final Class<T> objectClass) throws IOException {
+ return ANALYTICS_MODEL_OBJECT_MAPPER.readValue(jsonString, objectClass);
+ }
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java
new file mode 100644
index 0000000..75561a8
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/AnalyticsModelObjectMapperSupplier.java
@@ -0,0 +1,112 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Supplier;
+import com.jayway.jsonpath.Configuration;
+import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.Option;
+import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
+import com.jayway.jsonpath.spi.json.JsonProvider;
+import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;
+import com.jayway.jsonpath.spi.mapper.MappingProvider;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ *<p>
+ * {@link Supplier} that can be used by clients to get Object Mapper which specializes
+ * in serialize and deserialize - DCAE Analytics Model JSON Objects. Clients can
+ * choose to memoize this Supplier for performance enhancements
+ * <br>
+ * NOTE: This supplier also setups up {@link JsonPath} default
+ * config to make use of this Supplier object mapper
+ *</p>
+ * @author Rajiv Singla . Creation Date: 11/10/2016.
+ */
+@SuppressFBWarnings("SIC_INNER_SHOULD_BE_STATIC_ANON")
+public class AnalyticsModelObjectMapperSupplier implements Supplier<ObjectMapper> {
+
+ @Override
+ public ObjectMapper get() {
+
+ final ObjectMapper objectMapper = new ObjectMapper();
+
+ // Serialize null values
+ objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+ // Don't fail on unknown properties
+ objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+ // Register Common Event Format Module
+ objectMapper.registerModule(new CommonEventFormatModule());
+ // Register TCA Policy Module
+ objectMapper.registerModule(new TCAPolicyModule());
+ // Register TCA Facade Module
+ objectMapper.registerModule(new TCAFacadeModelModule());
+
+
+ // Setup JsonPath default config
+ setupJsonPathDefaultConfig(objectMapper);
+
+ return objectMapper;
+ }
+
+
+ /**
+ * Setups up default Config for {@link JsonPath}
+ *
+ * @param objectMapper Jackson object mapper
+ */
+ private void setupJsonPathDefaultConfig(final ObjectMapper objectMapper) {
+
+ Configuration.setDefaults(new Configuration.Defaults() {
+
+ private final JsonProvider jsonProvider = new JacksonJsonProvider(objectMapper);
+ private final MappingProvider mappingProvider = new JacksonMappingProvider(objectMapper);
+
+ @Override
+ public JsonProvider jsonProvider() {
+ return jsonProvider;
+ }
+
+ @Override
+ public MappingProvider mappingProvider() {
+ return mappingProvider;
+ }
+
+ @Override
+ public Set<Option> options() {
+
+ // Json Path exceptions are suppressed, also missing properties are tolerated
+ return EnumSet.of(Option.DEFAULT_PATH_LEAF_TO_NULL, Option.SUPPRESS_EXCEPTIONS);
+ }
+ });
+
+
+ }
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/CommonEventFormatModule.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/CommonEventFormatModule.java
new file mode 100644
index 0000000..f30cecf
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/CommonEventFormatModule.java
@@ -0,0 +1,84 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json;
+
+import com.fasterxml.jackson.core.Version;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.AlertAction;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.AlertType;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.BaseCEFModel;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.CommonEventHeader;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.Criticality;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.Event;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.EventListener;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.EventSeverity;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.MeasurementsForVfScalingFields;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.PerformanceCounter;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.Priority;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.ThresholdCrossingAlertFields;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.VNicUsageArray;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.AlertActionMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.AlertTypeMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.BaseCEFModelMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.CommonEventHeaderMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.CriticalityMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.EventListenerMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.EventMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.EventSeverityMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.MeasurementsForVfScalingFieldsMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.PerformanceCounterMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.PriorityMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.ThresholdCrossingAlertFieldsMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef.VNicUsageArrayMixin;
+
+/**
+ * @author Rajiv Singla . Creation Date: 10/18/2016.
+ */
+public class CommonEventFormatModule extends SimpleModule {
+
+ private static final long serialVersionUID = 1L;
+
+ public CommonEventFormatModule() {
+ super("Common Event Format",
+ new Version(25, 0, 0, null, " org.openecomp.dcae.apod.analytics.model", "dcae-analytics-model"));
+ }
+
+ @Override
+ public void setupModule(final SetupContext setupContext) {
+
+ setupContext.setMixInAnnotations(AlertAction.class, AlertActionMixin.class);
+ setupContext.setMixInAnnotations(AlertType.class, AlertTypeMixin.class);
+ setupContext.setMixInAnnotations(BaseCEFModel.class, BaseCEFModelMixin.class);
+ setupContext.setMixInAnnotations(CommonEventHeader.class, CommonEventHeaderMixin.class);
+ setupContext.setMixInAnnotations(Criticality.class, CriticalityMixin.class);
+ setupContext.setMixInAnnotations(EventListener.class, EventListenerMixin.class);
+ setupContext.setMixInAnnotations(Event.class, EventMixin.class);
+ setupContext.setMixInAnnotations(EventSeverity.class, EventSeverityMixin.class);
+ setupContext.setMixInAnnotations(MeasurementsForVfScalingFields.class,
+ MeasurementsForVfScalingFieldsMixin.class);
+ setupContext.setMixInAnnotations(PerformanceCounter.class, PerformanceCounterMixin.class);
+ setupContext.setMixInAnnotations(Priority.class, PriorityMixin.class);
+ setupContext.setMixInAnnotations(ThresholdCrossingAlertFields.class, ThresholdCrossingAlertFieldsMixin.class);
+ setupContext.setMixInAnnotations(VNicUsageArray.class, VNicUsageArrayMixin.class);
+
+ }
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAFacadeModelModule.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAFacadeModelModule.java
new file mode 100644
index 0000000..8f29872
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAFacadeModelModule.java
@@ -0,0 +1,49 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json;
+
+import com.fasterxml.jackson.core.Version;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.openecomp.dcae.apod.analytics.model.facade.tca.AAI;
+import org.openecomp.dcae.apod.analytics.model.facade.tca.TCAVESResponse;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.facade.tca.AAIMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.facade.tca.VESCEFMessageResponseMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/9/2016.
+ */
+public class TCAFacadeModelModule extends SimpleModule {
+
+ private static final long serialVersionUID = 1L;
+
+ public TCAFacadeModelModule() {
+ super("Threshold Crossing Alert Facade",
+ new Version(1, 0, 0, null, "org.openecomp.dace.apod.analytics.model", "dcae-analytics-model"));
+ }
+
+ @Override
+ public void setupModule(final SetupContext setupContext) {
+ setupContext.setMixInAnnotations(TCAVESResponse.class, VESCEFMessageResponseMixin.class);
+ setupContext.setMixInAnnotations(AAI.class, AAIMixin.class);
+ }
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAPolicyModule.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAPolicyModule.java
new file mode 100644
index 0000000..ce8997c
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/TCAPolicyModule.java
@@ -0,0 +1,61 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json;
+
+import com.fasterxml.jackson.core.Version;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.openecomp.dcae.apod.analytics.model.domain.policy.tca.BaseTCAPolicyModel;
+import org.openecomp.dcae.apod.analytics.model.domain.policy.tca.Direction;
+import org.openecomp.dcae.apod.analytics.model.domain.policy.tca.MetricsPerFunctionalRole;
+import org.openecomp.dcae.apod.analytics.model.domain.policy.tca.TCAPolicy;
+import org.openecomp.dcae.apod.analytics.model.domain.policy.tca.Threshold;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca.BaseTCAPolicyModelMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca.DirectionMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca.MetricsPerFunctionalRoleMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca.TCAPolicyMixin;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca.ThresholdMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public class TCAPolicyModule extends SimpleModule {
+
+ private static final long serialVersionUID = 1L;
+
+ public TCAPolicyModule() {
+ super("Threshold Crossing Alert Policy",
+ new Version(1, 0, 0, null, " org.openecomp.dcae.apod.analytics.model", "dcae-analytics-model"));
+ }
+
+ @Override
+ public void setupModule(final SetupContext setupContext) {
+
+ setupContext.setMixInAnnotations(BaseTCAPolicyModel.class, BaseTCAPolicyModelMixin.class);
+ setupContext.setMixInAnnotations(Direction.class, DirectionMixin.class);
+ setupContext.setMixInAnnotations(TCAPolicy.class, TCAPolicyMixin.class);
+ setupContext.setMixInAnnotations(MetricsPerFunctionalRole.class, MetricsPerFunctionalRoleMixin.class);
+ setupContext.setMixInAnnotations(Threshold.class, ThresholdMixin.class);
+ setupContext.setMixInAnnotations(TCAPolicy.class, TCAPolicyMixin.class);
+
+
+ }
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/BaseDynamicPropertiesProviderMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/BaseDynamicPropertiesProviderMixin.java
new file mode 100644
index 0000000..8c50997
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/BaseDynamicPropertiesProviderMixin.java
@@ -0,0 +1,61 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.openecomp.dcae.apod.analytics.model.domain.BaseDynamicPropertiesProvider;
+
+import java.util.Map;
+
+/**
+ * Json Mixin for {@link BaseDynamicPropertiesProvider}
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class BaseDynamicPropertiesProviderMixin implements JsonMixin {
+
+ /**
+ * Provides hint to Jackson Json Object mapper to bind any put all dynamic properties in a map
+ *
+ * @param propertyName dynamic property name
+ * @param propertyValue dynamic property value
+ */
+ @JsonAnySetter
+ public abstract void addDynamicProperties(String propertyName, Object propertyValue);
+
+ /**
+ * Provides hint to serialize dynamic properties as map
+ *
+ * @return dynamic properties map
+ */
+ @JsonAnyGetter
+ public abstract Map<String, Object> getDynamicProperties();
+
+ /**
+ * Ignores isDynamicPropertiesPresent for json serialization
+ *
+ * @return true if dynamic properties are present
+ */
+ @JsonIgnore
+ public abstract boolean isDynamicPropertiesPresent();
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/JsonMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/JsonMixin.java
new file mode 100644
index 0000000..131d1f0
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/JsonMixin.java
@@ -0,0 +1,31 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin;
+
+import java.io.Serializable;
+
+/**
+ * Marker Interface for all Json Mixin classes
+ *
+ * @author Rajiv Singla . Creation Date: 11/3/2016.
+ */
+public interface JsonMixin extends Serializable {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertActionMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertActionMixin.java
new file mode 100644
index 0000000..45577db
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertActionMixin.java
@@ -0,0 +1,30 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.JsonMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class AlertActionMixin implements JsonMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertTypeMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertTypeMixin.java
new file mode 100644
index 0000000..efed8b8
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/AlertTypeMixin.java
@@ -0,0 +1,74 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.AlertType;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.JsonMixin;
+
+/**
+ * Mixin for Alert Type
+ *
+ * @author Rajiv Singla . Creation Date: 11/3/2016.
+ */
+public abstract class AlertTypeMixin implements JsonMixin {
+
+ private String name;
+
+ /**
+ * Provides hint to Jackson Json to parse alert type string which are not valid java variable names
+ * to proper java alert types
+ *
+ * @param name name of Alert coming from incoming Json
+ *
+ * @return java representation of alert type
+ */
+ @JsonCreator
+ public static AlertType forValue(String name) {
+
+ switch (name) {
+ case "CARD-ANOMALY":
+ return AlertType.CARD_ANOMALY;
+ case "ELEMENT-ANOMALY":
+ return AlertType.ELEMENT_ANOMALY;
+ case "INTERFACE-ANOMALY":
+ return AlertType.INTERFACE_ANOMALY;
+ case "SERVICE-ANOMALY":
+ return AlertType.SERVICE_ANOMALY;
+ default:
+ return AlertType.UNKNOWN;
+ }
+
+ }
+
+ /**
+ * Provide hint to Jackson Json to parse java object variable name to CEF specification alert String
+ *
+ * @return alert string in CEF format
+ */
+ @JsonValue
+ public String getName() {
+ return name;
+ }
+
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/BaseCEFModelMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/BaseCEFModelMixin.java
new file mode 100644
index 0000000..b332867
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/BaseCEFModelMixin.java
@@ -0,0 +1,33 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.BaseDynamicPropertiesProviderMixin;
+
+/**
+ * Abstract Mixin for all CEF Model Mixins
+ *
+ * @author Rajiv Singla . Creation Date: 10/18/2016.
+ */
+public abstract class BaseCEFModelMixin extends BaseDynamicPropertiesProviderMixin {
+
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CommonEventHeaderMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CommonEventHeaderMixin.java
new file mode 100644
index 0000000..87fd396
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CommonEventHeaderMixin.java
@@ -0,0 +1,27 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+/**
+ * @author Rajiv Singla . Creation Date: 10/18/2016.
+ */
+public abstract class CommonEventHeaderMixin extends BaseCEFModelMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CriticalityMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CriticalityMixin.java
new file mode 100644
index 0000000..a47e4f0
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/CriticalityMixin.java
@@ -0,0 +1,30 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.JsonMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class CriticalityMixin implements JsonMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventListenerMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventListenerMixin.java
new file mode 100644
index 0000000..c19d386
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventListenerMixin.java
@@ -0,0 +1,31 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+/**
+ * Event Listener Json Mixin class
+ * <p>
+ * @author Rajiv Singla . Creation Date: 10/18/2016.
+ */
+public abstract class EventListenerMixin extends BaseCEFModelMixin {
+
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventMixin.java
new file mode 100644
index 0000000..9e9c96a
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventMixin.java
@@ -0,0 +1,31 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+/**
+ * Event Json Mixin class
+ * <p>
+ * @author Rajiv Singla . Creation Date: 10/18/2016.
+ */
+public abstract class EventMixin extends BaseCEFModelMixin {
+
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventSeverityMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventSeverityMixin.java
new file mode 100644
index 0000000..48aafcf
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/EventSeverityMixin.java
@@ -0,0 +1,30 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.JsonMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class EventSeverityMixin implements JsonMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/MeasurementsForVfScalingFieldsMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/MeasurementsForVfScalingFieldsMixin.java
new file mode 100644
index 0000000..8cde5d6
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/MeasurementsForVfScalingFieldsMixin.java
@@ -0,0 +1,39 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonSetter;
+import org.openecomp.dcae.apod.analytics.model.domain.cef.VNicUsageArray;
+
+import java.util.List;
+
+/**
+ * @author Rajiv Singla . Creation Date: 10/18/2016.
+ */
+public abstract class MeasurementsForVfScalingFieldsMixin extends BaseCEFModelMixin {
+
+ @JsonSetter("vNicUsageArray")
+ public abstract void setVNicUsageArray(List<VNicUsageArray> vNicUsageArrays);
+
+ @JsonGetter("vNicUsageArray")
+ public abstract List<VNicUsageArray> getVNicUsageArray();
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PerformanceCounterMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PerformanceCounterMixin.java
new file mode 100644
index 0000000..2c049fe
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PerformanceCounterMixin.java
@@ -0,0 +1,29 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+/**
+ * CEF Performance Counter Mixin
+ *
+ * @author Rajiv Singla . Creation Date: 11/3/2016.
+ */
+public abstract class PerformanceCounterMixin extends BaseCEFModelMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PriorityMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PriorityMixin.java
new file mode 100644
index 0000000..ee2404e
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/PriorityMixin.java
@@ -0,0 +1,30 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.JsonMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class PriorityMixin implements JsonMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/ThresholdCrossingAlertFieldsMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/ThresholdCrossingAlertFieldsMixin.java
new file mode 100644
index 0000000..44e17ac
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/ThresholdCrossingAlertFieldsMixin.java
@@ -0,0 +1,29 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+/**
+ * Mixin class for ThresholdCrossingAlertFields
+ *
+ * @author Rajiv Singla . Creation Date: 11/3/2016.
+ */
+public abstract class ThresholdCrossingAlertFieldsMixin extends BaseCEFModelMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/VNicUsageArrayMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/VNicUsageArrayMixin.java
new file mode 100644
index 0000000..e882183
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/cef/VNicUsageArrayMixin.java
@@ -0,0 +1,48 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.cef;
+
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonSetter;
+
+/**
+ * @author Rajiv Singla . Creation Date: 10/18/2016.
+ */
+public abstract class VNicUsageArrayMixin extends BaseCEFModelMixin {
+
+ /**
+ * Provides hint to Jackson Jackson deserialization to bind "vNicIdentifier" string to "vNicIdentifier"
+ * variable in CEF parsed Java Object
+ *
+ * @param name of the vNicIdentifier
+ */
+ @JsonSetter("vNicIdentifier")
+ public abstract void setVNicIdentifier(String name);
+
+ /**
+ * Provides hint to Jackson Jackson serialization to bind "vNicIdentifier" field to "vNicIdentifier" in json
+ *
+ * @return name of vNicIdentifier
+ */
+ @JsonGetter("vNicIdentifier")
+ public abstract String getVNicIdentifier();
+
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/AAIMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/AAIMixin.java
new file mode 100644
index 0000000..177b3d3
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/AAIMixin.java
@@ -0,0 +1,55 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.facade.tca;
+
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonSetter;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.JsonMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/9/2016.
+ */
+public abstract class AAIMixin implements JsonMixin {
+
+ private String genericVNFId;
+ private String genericServerId;
+
+ @JsonGetter("generic-vnf.vnf-id")
+ public String getGenericVNFId() {
+ return genericVNFId;
+ }
+
+ @JsonSetter("generic-vnf.vnf-id")
+ public void setGenericVNFId(String genericVNFId) {
+ this.genericVNFId = genericVNFId;
+ }
+
+ @JsonGetter("vserver.vserver-name")
+ public String getGenericServerId() {
+ return genericServerId;
+ }
+
+ @JsonSetter("vserver.vserver-name")
+ public void setGenericServerId(String genericServerId) {
+ this.genericServerId = genericServerId;
+ }
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/VESCEFMessageResponseMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/VESCEFMessageResponseMixin.java
new file mode 100644
index 0000000..f3f44ab
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/facade/tca/VESCEFMessageResponseMixin.java
@@ -0,0 +1,56 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.facade.tca;
+
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonSetter;
+import org.openecomp.dcae.apod.analytics.model.facade.tca.AAI;
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.JsonMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/9/2016.
+ */
+public abstract class VESCEFMessageResponseMixin implements JsonMixin {
+
+ private String targetType;
+ private AAI aai;
+
+ @JsonGetter("target_type")
+ public String getTargetType() {
+ return targetType;
+ }
+
+ @JsonSetter("target_type")
+ public void setTargetType(String targetType) {
+ this.targetType = targetType;
+ }
+
+ @JsonGetter("AAI")
+ public AAI getAai() {
+ return aai;
+ }
+
+ @JsonSetter("AAI")
+ public void setAai(AAI aai) {
+ this.aai = aai;
+ }
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/BaseTCAPolicyModelMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/BaseTCAPolicyModelMixin.java
new file mode 100644
index 0000000..9c589db
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/BaseTCAPolicyModelMixin.java
@@ -0,0 +1,30 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca;
+
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.BaseDynamicPropertiesProviderMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class BaseTCAPolicyModelMixin extends BaseDynamicPropertiesProviderMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/DirectionMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/DirectionMixin.java
new file mode 100644
index 0000000..dbc66b9
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/DirectionMixin.java
@@ -0,0 +1,30 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca;
+
+import org.openecomp.dcae.apod.analytics.model.util.json.mixin.JsonMixin;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class DirectionMixin implements JsonMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/MetricsPerFunctionalRoleMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/MetricsPerFunctionalRoleMixin.java
new file mode 100644
index 0000000..8ca10fc
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/MetricsPerFunctionalRoleMixin.java
@@ -0,0 +1,28 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class MetricsPerFunctionalRoleMixin extends BaseTCAPolicyModelMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixin.java
new file mode 100644
index 0000000..627f211
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/TCAPolicyMixin.java
@@ -0,0 +1,28 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class TCAPolicyMixin extends BaseTCAPolicyModelMixin {
+}
diff --git a/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/ThresholdMixin.java b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/ThresholdMixin.java
new file mode 100644
index 0000000..d450a30
--- /dev/null
+++ b/dcae-analytics-model/src/main/java/org/openecomp/dcae/apod/analytics/model/util/json/mixin/policy/tca/ThresholdMixin.java
@@ -0,0 +1,44 @@
+/*
+ * ===============================LICENSE_START======================================
+ * dcae-analytics
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================LICENSE_END===========================================
+ */
+
+package org.openecomp.dcae.apod.analytics.model.util.json.mixin.policy.tca;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ *
+ * @author Rajiv Singla . Creation Date: 11/5/2016.
+ */
+public abstract class ThresholdMixin extends BaseTCAPolicyModelMixin {
+
+ @JsonIgnore
+ private Long actualFieldValue;
+
+ @JsonIgnore
+ public Long getActualFieldValue() {
+ return actualFieldValue;
+ }
+
+ @JsonProperty
+ public void setActualFieldValue(Long actualFieldValue) {
+ this.actualFieldValue = actualFieldValue;
+ }
+}