diff options
Diffstat (limited to 'src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java')
-rw-r--r-- | src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java b/src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java new file mode 100644 index 0000000..e7f7cd5 --- /dev/null +++ b/src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java @@ -0,0 +1,181 @@ +/******************************************************************************* + * Copyright 2017 ZTE, Inc. and others. + * + * 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. + ******************************************************************************/ +/** + * + */ +package org.onap.msb.sdk.httpclient.builder.impl; + +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; + +import org.onap.msb.sdk.discovery.entity.MicroServiceFullInfo; +import org.onap.msb.sdk.discovery.entity.NodeInfo; +import org.onap.msb.sdk.httpclient.RetrofitServiceUtils; +import org.onap.msb.sdk.httpclient.ServiceHttpEndPointBeanObject; +import org.onap.msb.sdk.httpclient.ServiceHttpEndPointObject; +import org.onap.msb.sdk.httpclient.builder.IRetrofitObjectBuilder; +import org.onap.msb.sdk.httpclient.exception.RetrofitServiceRuntimeException; +import org.onap.msb.sdk.httpclient.handler.RetrofitServiceHandlerContext; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; + +/** + * @author 10071214 + * + */ +public class ClientRetrofitObjectBuilder implements IRetrofitObjectBuilder { + + + private RetrofitServiceHandlerContext context; + + + public ClientRetrofitObjectBuilder(RetrofitServiceHandlerContext context) { + super(); + this.context = context; + } + + + /* + * (non-Javadoc) + * + * @see + * com.zte.ums.zenap.httpclient.retrofit.builder.IRetrofitObjectBuilder#buildRetrofitObject(java. + * util.concurrent.atomic.AtomicReference) + */ + @Override + public Map<ServiceHttpEndPointObject, Object> buildRetrofitObject( + AtomicReference<Map<ServiceHttpEndPointObject, Object>> endPointToRetrofitRef, + ServiceHttpEndPointObject lastEndPoint) throws RetrofitServiceRuntimeException { + + Map<ServiceHttpEndPointObject, Object> srvEndPointToRetrofit = endPointToRetrofitRef.get(); + if (srvEndPointToRetrofit == null) { + srvEndPointToRetrofit = new LinkedHashMap<>(); + try { + + + ServiceHttpEndPointBeanObject srvhttpEndPointBeanObject = + context.getServiceHttpEndPointBeanObject(); + + // MsbClientFactory msbClient = context.getLocator().getService(MsbClientFactory.class); + + MicroServiceFullInfo fullInfo = null; + + fullInfo = + context.getMsbClient().queryMicroServiceInfo(srvhttpEndPointBeanObject.getServiceName(), + srvhttpEndPointBeanObject.getServiceVersion()); + + + for (NodeInfo nodeInfo : fullInfo.getNodes()) { + + MicroServiceFullInfo cloneFullInfo = cloneFullInfo(fullInfo, nodeInfo); + + ServiceHttpEndPointObject endPointObj = + new ServiceHttpEndPointObject(srvhttpEndPointBeanObject.getServiceName(), + srvhttpEndPointBeanObject.getServiceVersion(), nodeInfo, cloneFullInfo); + + // 目前支持http + String baseUrl = null; + if (fullInfo.getUrl() == null || fullInfo.getUrl().trim().length() == 0 + || fullInfo.getUrl().equals("/")) { + baseUrl = String.format("http://%s:%s/", nodeInfo.getIp(), nodeInfo.getPort()); + } else { + baseUrl = String.format("http://%s:%s%s/", nodeInfo.getIp(), nodeInfo.getPort(), + fullInfo.getUrl()); + } + + OkHttpClient httpClient = null; + + if (context.getHttpClientConf() != null) { + if (srvhttpEndPointBeanObject.getClientProtocl().toLowerCase().equals("https")) { + httpClient = + RetrofitServiceUtils.buildDefaultOkHttpsClient(context.getHttpClientConf()); + } else { + httpClient = + RetrofitServiceUtils.buildDefaultOkHttpClient(context.getHttpClientConf()); + } + } else { + if (srvhttpEndPointBeanObject.getClientProtocl().toLowerCase().equals("https")) { + httpClient = RetrofitServiceUtils.buildDefaultOkHttpsClient( + RetrofitServiceHandlerContext.getGlobalHttpClientConf()); + } else { + httpClient = RetrofitServiceUtils.buildDefaultOkHttpClient( + RetrofitServiceHandlerContext.getGlobalHttpClientConf()); + } + } + + + + Retrofit retrofit = new Retrofit.Builder().client(httpClient).baseUrl(baseUrl) + .addConverterFactory(context.getConverterFactoryBuilder().buildConverterFactory()) + .build(); + + srvEndPointToRetrofit.put(endPointObj, + retrofit.create(context.getRetrofitSrvInterfaceClazz())); + + } + + if (srvEndPointToRetrofit.isEmpty()) { + throw new RetrofitServiceRuntimeException( + "can't find service in msb,serviceName:" + srvhttpEndPointBeanObject.getServiceName() + + ",serviceVersion:" + srvhttpEndPointBeanObject.getServiceVersion()); + } + + if (lastEndPoint != null) { + srvEndPointToRetrofit.remove(lastEndPoint); + } + + if (srvEndPointToRetrofit.isEmpty()) { + throw new RetrofitServiceRuntimeException("can't find other service in msb,serviceName:" + + srvhttpEndPointBeanObject.getServiceName() + ",serviceVersion:" + + srvhttpEndPointBeanObject.getServiceVersion()); + } + + if (endPointToRetrofitRef.compareAndSet(null, srvEndPointToRetrofit)) { + context.setLastUpdateMsbTime(System.currentTimeMillis()); + } + + return endPointToRetrofitRef.get(); + + + } catch (Exception e) { + throw new RetrofitServiceRuntimeException("init Retrofit service map fail", e); + } + + } else { + return endPointToRetrofitRef.get(); + } + } + + + private MicroServiceFullInfo cloneFullInfo(MicroServiceFullInfo fullInfo, NodeInfo nodeInfo) { + + MicroServiceFullInfo cloneFuleInfo = new MicroServiceFullInfo(); + cloneFuleInfo.setMetadata(fullInfo.getMetadata()); + cloneFuleInfo.setProtocol(fullInfo.getProtocol()); + cloneFuleInfo.setServiceName(fullInfo.getServiceName()); + cloneFuleInfo.setStatus(fullInfo.getStatus()); + cloneFuleInfo.setUrl(fullInfo.getUrl()); + cloneFuleInfo.setVersion(fullInfo.getVersion()); + cloneFuleInfo.setVisualRange(fullInfo.getVisualRange()); + Set<NodeInfo> nodeInfos = new HashSet<>(); + nodeInfos.add(nodeInfo); + cloneFuleInfo.setNodes(nodeInfos); + return cloneFuleInfo; + } + +} |