2  * ============LICENSE_START=======================================================
 
   3  * ONAP : ccsdk features
 
   4  * ================================================================================
 
   5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
 
   7  * ================================================================================
 
   8  * Licensed under the Apache License, Version 2.0 (the "License");
 
   9  * you may not use this file except in compliance with the License.
 
  10  * You may obtain a copy of the License at
 
  12  *     http://www.apache.org/licenses/LICENSE-2.0
 
  14  * Unless required by applicable law or agreed to in writing, software
 
  15  * distributed under the License is distributed on an "AS IS" BASIS,
 
  16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  17  * See the License for the specific language governing permissions and
 
  18  * limitations under the License.
 
  19  * ============LICENSE_END=========================================================
 
  22 package org.onap.ccsdk.features.sdnr.wt.yang.mapper;
 
  24 import java.lang.reflect.InvocationTargetException;
 
  25 import java.lang.reflect.Method;
 
  27 import javax.annotation.Nullable;
 
  28 import org.eclipse.jdt.annotation.NonNull;
 
  29 import org.onap.ccsdk.features.sdnr.wt.yang.mapper.mapperextensions.YangToolsBuilderAnnotationIntrospector;
 
  30 import org.opendaylight.yangtools.concepts.Builder;
 
  31 import org.opendaylight.yangtools.yang.binding.DataObject;
 
  32 import org.slf4j.Logger;
 
  33 import org.slf4j.LoggerFactory;
 
  36  * YangToolsMapper is a specific Jackson mapper configuration for opendaylight yangtools serialization or
 
  37  * deserialization of DataObject to/from JSON TODO ChoiceIn and Credentials deserialization only for
 
  38  * LoginPasswordBuilder
 
  40 public class YangToolsMapper2<T extends DataObject> extends YangToolsMapper {
 
  42     private static final Logger LOG = LoggerFactory.getLogger(YangToolsMapper2.class);
 
  43     private static final long serialVersionUID = 1L;
 
  45     private @Nullable final Class<?> builderClazz;
 
  48      * Generic Object creation of yangtools java class builder pattern.
 
  50      * @param <X> Class of DataObject
 
  51      * @param <B> Builder for the class.
 
  52      * @param clazz specifies class to be mapped
 
  53      * @param builderClazz is the builder for class with name pattern "clazzBuilder".<br>
 
  54      *        If null the clazz is expected to support normal jackson build pattern.
 
  55      * @throws ClassNotFoundException if builderClazz not available in bundle
 
  57     public <X extends T, B> YangToolsMapper2(@NonNull Class<T> clazz,
 
  58             @Nullable Class<B> builderClazz) throws ClassNotFoundException {
 
  59         super(new YangToolsBuilderAnnotationIntrospector(clazz, builderClazz));
 
  62                 builderClazz != null ? builderClazz : getBuilderClass(YangToolsMapperHelper.getBuilderClassName(clazz));
 
  66      * Get Builder object for yang tools interface.
 
  68      * @param <T> yang-tools base datatype
 
  69      * @param clazz class with interface.
 
  70      * @return builder for interface or null if not existing
 
  72     public @Nullable<B> B getBuilder(Class<T> clazz) {
 
  74             if (builderClazz != null)
 
  75                 return (B) builderClazz.getDeclaredConstructor().newInstance();
 
  78         } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
 
  79                 | NoSuchMethodException | SecurityException e) {
 
  80             LOG.warn("Problem intantiating Builder", e);
 
  85     // --- Private functions
 
  88      * Search builder in context
 
  92      * @throws ClassNotFoundException
 
  94     @SuppressWarnings("unchecked")
 
  95     private <X extends T, B> Class<B> getBuilderClass(String name) throws ClassNotFoundException {
 
  96         return (Class<B>) YangToolsMapperHelper.getBuilderClass(name);