diff options
Diffstat (limited to 'actn-interface-tools/global-control/app/src/main/java/org/onap/integration/actninterfacetools/globalapp/impl/GlobalServiceUtil.java')
-rw-r--r-- | actn-interface-tools/global-control/app/src/main/java/org/onap/integration/actninterfacetools/globalapp/impl/GlobalServiceUtil.java | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/actn-interface-tools/global-control/app/src/main/java/org/onap/integration/actninterfacetools/globalapp/impl/GlobalServiceUtil.java b/actn-interface-tools/global-control/app/src/main/java/org/onap/integration/actninterfacetools/globalapp/impl/GlobalServiceUtil.java new file mode 100644 index 0000000..899a794 --- /dev/null +++ b/actn-interface-tools/global-control/app/src/main/java/org/onap/integration/actninterfacetools/globalapp/impl/GlobalServiceUtil.java @@ -0,0 +1,272 @@ +/* + * ============LICENSE_START======================================================= + * Actn Interface Tools + * ================================================================================ + * Copyright (C) 2023 Huawei Canada Limited. + * ================================================================================ + * 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.onap.integration.actninterfacetools.globalapp.impl; + +import com.google.auto.service.AutoService; +import org.onap.integration.actninterfacetools.actnclient.impl.ActnClientServiceImpl; +import org.onap.integration.actninterfacetools.globalapi.ActnClientService; +import org.onap.integration.actninterfacetools.globalapi.ActnDataConverter; +import org.onap.integration.actninterfacetools.globalapi.GlobalService; +import org.onap.integration.actninterfacetools.globalapp.AbstractYangModelRegistrator; +import org.onap.integration.actninterfacetools.globalapp.ActnModelRegistrator; +import org.onap.integration.actninterfacetools.globalapp.YangClassLoaderRegistry; +import org.onap.integration.actninterfacetools.yangutils.CodecConverter; +import org.onap.integration.actninterfacetools.yangutils.YangToolsUtil; +import org.onosproject.yang.model.ModelConverter; +import org.onosproject.yang.model.ModelObjectData; +import org.onosproject.yang.model.ResourceData; +import org.onosproject.yang.model.SchemaContextProvider; +import org.onosproject.yang.model.SchemaContext; +import org.onosproject.yang.model.ResourceId; +import org.onosproject.yang.model.RpcContext; +import org.onosproject.yang.model.ModelObjectId; +import org.onosproject.yang.model.YangModel; +import org.onosproject.yang.model.YangModule; +import org.onosproject.yang.model.YangModuleId; +import org.onosproject.yang.model.NodeKey; +import org.onosproject.yang.runtime.ModelRegistrationParam; +import org.onosproject.yang.runtime.YangModelRegistry; +import org.onosproject.yang.runtime.YangRuntimeService; +import org.onosproject.yang.runtime.YangSerializerRegistry; +import org.onosproject.yang.runtime.CompositeData; +import org.onosproject.yang.runtime.CompositeStream; +import org.onosproject.yang.runtime.RuntimeContext; +import org.onosproject.yang.runtime.YangSerializer; +import org.onosproject.yang.runtime.impl.DefaultModelConverter; +import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry; +import org.onosproject.yang.runtime.impl.DefaultYangRuntimeHandler; +import org.onosproject.yang.runtime.impl.DefaultYangSerializerRegistry; +import org.onosproject.yang.runtime.impl.DefaultSchemaContextProvider; +import org.onosproject.yang.serializers.json.JsonSerializer; +import org.onosproject.yang.serializers.xml.XmlSerializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.URISyntaxException; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import static com.google.common.base.Preconditions.checkNotNull; + + +public class GlobalServiceUtil implements YangModelRegistry, + YangSerializerRegistry, YangRuntimeService, ModelConverter, + SchemaContextProvider, YangClassLoaderRegistry { + private static volatile GlobalServiceUtil globalServiceInstance = null; + private static Map<ActnDataConverter, ActnClientService> dataConverter2ActnClientServiceMap = new ConcurrentHashMap(); + private static volatile boolean initialized = false; + private static final String APP_ID = "org.onosproject.yang"; + private static final Logger log = LoggerFactory.getLogger(GlobalServiceUtil.class); + private static volatile DefaultYangModelRegistry modelRegistry = null; + private static volatile DefaultYangSerializerRegistry serializerRegistry = null; + private static volatile DefaultYangRuntimeHandler runtimeService = null; + private static volatile DefaultModelConverter modelConverter = null; + private static volatile DefaultSchemaContextProvider schemaContextProvider = null; + + private static Map<String, ClassLoader> classLoaders = null; + private GlobalServiceUtil(){ + } + public String getServiceName(){ + return "GlobalServiceUtil"; + } + public static GlobalServiceUtil getNewGlobalService(){ + if(globalServiceInstance != null){ + return globalServiceInstance; + } + synchronized (ActnClientServiceImpl.class) { + if(globalServiceInstance == null){ + globalServiceInstance = new GlobalServiceUtil(); + + } + return globalServiceInstance; + } + } + + + public synchronized void initialize() throws URISyntaxException { + if(!initialized){ + if(serializerRegistry == null){ + serializerRegistry = new DefaultYangSerializerRegistry(); + } + if(modelRegistry == null){ + modelRegistry = new DefaultYangModelRegistry(); + } + if(runtimeService == null){ + runtimeService = new DefaultYangRuntimeHandler(serializerRegistry, modelRegistry); + } + if(schemaContextProvider == null){ + schemaContextProvider = new DefaultSchemaContextProvider(modelRegistry); + } + serializerRegistry.registerSerializer(new JsonSerializer()); + serializerRegistry.registerSerializer(new XmlSerializer()); + if(modelConverter == null){ + modelConverter = new DefaultModelConverter(modelRegistry); + } + if(classLoaders == null){ + classLoaders = new ConcurrentHashMap<>(); + } + AbstractYangModelRegistrator abstractYangModelRegistrator = new ActnModelRegistrator(); + abstractYangModelRegistrator.activate(); + CodecConverter.active(); + YangToolsUtil.active(); + log.info("Initialization Finished"); + initialized = true; + } + } + + + public synchronized ActnClientService getActnClientService(ActnDataConverter actnDataConverter) throws URISyntaxException { + if(!initialized){ + initialize(); + } + if(dataConverter2ActnClientServiceMap.get(actnDataConverter)!=null){ + return dataConverter2ActnClientServiceMap.get(actnDataConverter); + }else{ + ActnClientService actnClientService = new ActnClientServiceImpl(actnDataConverter); + dataConverter2ActnClientServiceMap.put(actnDataConverter, actnClientService); + return actnClientService; + } + } + + public DefaultYangModelRegistry getModelRegistry(){ + return modelRegistry; + } + public DefaultYangSerializerRegistry getSerializerRegistry(){ + return serializerRegistry; + } + public DefaultYangRuntimeHandler getRuntimeService(){ + return runtimeService; + } + public DefaultModelConverter getModelConverter(){ + return modelConverter; + } + public DefaultSchemaContextProvider getSchemaContextProvider(){ + return schemaContextProvider; + } + + public Map<String, ClassLoader> getClassLoaders(){ + return classLoaders; + } + + + @Override + public ClassLoader getClassLoader(String modelId) { + return classLoaders.get(modelId); + } + + @Override + public void registerClassLoader(String modelId, ClassLoader classLoader) { + classLoaders.put(modelId, classLoader); + } + + @Override + public void unregisterClassLoader(String modelId) { + classLoaders.remove(modelId); + } + + @Override + public ModelObjectData createModel(ResourceData resourceData) { + return modelConverter.createModel(resourceData); + } + + @Override + public ResourceData createDataNode(ModelObjectData modelObjectData) { + return modelConverter.createDataNode(modelObjectData); + } + + @Override + public SchemaContext getSchemaContext(ResourceId resourceId) { + checkNotNull(resourceId, " resource id can't be null."); + NodeKey key = resourceId.nodeKeys().get(0); + if (resourceId.nodeKeys().size() == 1 && + "/".equals(key.schemaId().name())) { + return modelRegistry; + } + log.info("To be implemented."); + return null; + } + + @Override + public RpcContext getRpcContext(ResourceId resourceId) { + return schemaContextProvider.getRpcContext(resourceId); + } + + @Override + public void registerModel(ModelRegistrationParam modelRegistrationParam) throws IllegalArgumentException { + modelRegistry.registerModel(modelRegistrationParam); + } + + + @Override + public void registerAnydataSchema(ModelObjectId parentModId, ModelObjectId childModId) throws IllegalArgumentException { + modelRegistry.registerAnydataSchema(parentModId, childModId); + } + + @Override + public void unregisterAnydataSchema(Class parentClass, Class childClass) throws IllegalArgumentException { + modelRegistry.unregisterAnydataSchema(parentClass, childClass); + } + + @Override + public void unregisterModel(ModelRegistrationParam modelRegistrationParam) { + modelRegistry.unregisterModel(modelRegistrationParam); + } + + @Override + public Set<YangModel> getModels() { + return modelRegistry.getModels(); + } + + @Override + public YangModel getModel(String s) { + return modelRegistry.getModel(s); + } + + @Override + public YangModule getModule(YangModuleId yangModuleId) { + return modelRegistry.getModule(yangModuleId); + } + + @Override + public CompositeData decode(CompositeStream cs, RuntimeContext rc) { + return runtimeService.decode(cs, rc); + } + + @Override + public CompositeStream encode(CompositeData cd, RuntimeContext rc) { + return runtimeService.encode(cd, rc); + } + + @Override + public void registerSerializer(YangSerializer ys) { + serializerRegistry.registerSerializer(ys); + } + + @Override + public void unregisterSerializer(YangSerializer ys) { + serializerRegistry.unregisterSerializer(ys); + } + + @Override + public Set<YangSerializer> getSerializers() { + return serializerRegistry.getSerializers(); + } +} |