2 * Copyright © 2018 Orange, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.transportpce.tapi.connectivity;
10 import com.google.common.collect.ImmutableClassToInstanceMap;
11 import com.google.common.util.concurrent.ListenableFuture;
12 import java.nio.charset.StandardCharsets;
13 import java.util.HashMap;
15 import java.util.UUID;
16 import java.util.concurrent.ExecutionException;
17 import org.opendaylight.transportpce.common.OperationResult;
18 import org.opendaylight.transportpce.common.ResponseCodes;
19 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
20 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
21 import org.opendaylight.transportpce.tapi.utils.TapiContext;
22 import org.opendaylight.transportpce.tapi.validation.CreateConnectivityServiceValidation;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OrgOpenroadmServiceService;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInputBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfo;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfoBuilder;
32 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
33 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
34 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
35 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
36 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
37 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.BandwidthProfileBuilder;
38 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
39 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
40 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
41 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint;
42 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey;
43 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityService;
44 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInput;
45 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceOutput;
46 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceOutputBuilder;
47 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityService;
48 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceInput;
49 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceOutput;
50 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceOutputBuilder;
51 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionDetails;
52 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionDetailsInput;
53 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionDetailsOutput;
54 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionDetailsOutputBuilder;
55 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionEndPointDetails;
56 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionEndPointDetailsInput;
57 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionEndPointDetailsOutput;
58 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionEndPointDetailsOutputBuilder;
59 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceDetails;
60 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceDetailsInput;
61 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceDetailsOutput;
62 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceDetailsOutputBuilder;
63 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceList;
64 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceListInput;
65 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceListOutput;
66 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceListOutputBuilder;
67 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ServiceType;
68 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.TapiConnectivityService;
69 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.UpdateConnectivityService;
70 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.UpdateConnectivityServiceInput;
71 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.UpdateConnectivityServiceOutput;
72 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPoint;
73 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection;
74 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityService;
75 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityServiceBuilder;
76 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityServiceKey;
77 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPoint;
78 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointBuilder;
79 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointKey;
80 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.CapacityBuilder;
81 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.ServiceInterfacePointBuilder;
82 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.output.ServiceBuilder;
83 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.get.connection.details.output.ConnectionBuilder;
84 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.get.connection.end.point.details.output.ConnectionEndPointBuilder;
85 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.get.connectivity.service.list.output.Service;
86 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.get.connectivity.service.list.output.ServiceKey;
87 import org.opendaylight.yangtools.yang.binding.Rpc;
88 import org.opendaylight.yangtools.yang.common.ErrorType;
89 import org.opendaylight.yangtools.yang.common.RpcResult;
90 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
91 import org.slf4j.Logger;
92 import org.slf4j.LoggerFactory;
95 * Top level service interface providing main TAPI Connectivity services.
97 public class TapiConnectivityImpl implements TapiConnectivityService {
99 private static final Logger LOG = LoggerFactory.getLogger(TapiConnectivityImpl.class);
101 private OrgOpenroadmServiceService serviceHandler;
102 private final TapiContext tapiContext;
103 private final ConnectivityUtils connectivityUtils;
104 private TapiPceListenerImpl pceListenerImpl;
105 private TapiRendererListenerImpl rendererListenerImpl;
107 public TapiConnectivityImpl(OrgOpenroadmServiceService serviceHandler, TapiContext tapiContext,
108 ConnectivityUtils connectivityUtils, TapiPceListenerImpl pceListenerImpl,
109 TapiRendererListenerImpl rendererListenerImpl) {
110 LOG.info("inside TapiImpl constructor");
111 this.serviceHandler = serviceHandler;
112 this.tapiContext = tapiContext;
113 this.connectivityUtils = connectivityUtils;
114 this.pceListenerImpl = pceListenerImpl;
115 this.rendererListenerImpl = rendererListenerImpl;
119 public ListenableFuture<RpcResult<CreateConnectivityServiceOutput>> createConnectivityService(
120 CreateConnectivityServiceInput input) {
121 // TODO: later version of TAPI models include Name as an input parameter in connectivity.yang
122 LOG.info("RPC create-connectivity received: {}", input.getEndPoint());
123 Uuid serviceUuid = new Uuid(UUID.randomUUID().toString());
124 this.pceListenerImpl.setInput(input);
125 this.pceListenerImpl.setServiceUuid(serviceUuid);
126 this.rendererListenerImpl.setServiceUuid(serviceUuid);
127 ListenableFuture<RpcResult<ServiceCreateOutput>> output = null;
128 OperationResult validationResult = CreateConnectivityServiceValidation.validateCreateConnectivityServiceRequest(
130 if (validationResult.isSuccess()) {
131 LOG.info("input parameter of RPC create-connectivity are being handled");
132 // check uuid of SIP in tapi context
133 Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap = this.tapiContext.getTapiContext()
134 .getServiceInterfacePoint();
135 if (sipMap == null) {
136 return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
137 .withError(ErrorType.RPC, "SIP list is empty")
140 if (sipMap.containsKey(new ServiceInterfacePointKey(input.getEndPoint().values().stream().findFirst()
141 .orElseThrow().getServiceInterfacePoint().getServiceInterfacePointUuid()))
142 && sipMap.containsKey(new ServiceInterfacePointKey(input.getEndPoint().values().stream().skip(1)
143 .findFirst().orElseThrow().getServiceInterfacePoint().getServiceInterfacePointUuid()))) {
144 LOG.info("SIPs found in sipMap");
145 // TODO: differentiate between OTN service and GbE service in TAPI
146 ServiceCreateInput sci = this.connectivityUtils.createORServiceInput(input, serviceUuid);
148 return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
149 .withError(ErrorType.RPC, "Couldnt map Service create input")
152 LOG.info("Service Create input = {}", sci);
153 output = this.serviceHandler.serviceCreate(sci);
154 if (!output.isDone()) {
155 return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
156 .withError(ErrorType.RPC, "Service create RPC failed")
160 LOG.error("Unknown UUID");
161 return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
162 .withError(ErrorType.RPC, "SIPs do not exist in tapi context")
167 if (output == null) {
168 return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
169 .withError(ErrorType.RPC, "Failed to create service")
172 LOG.info("Service create request was successful");
173 if (output.get().getResult().getConfigurationResponseCommon().getResponseCode()
174 .equals(ResponseCodes.RESPONSE_FAILED)) {
175 return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
176 .withError(ErrorType.RPC, "Failed to create service")
179 LOG.info("Output of service request = {}", output.get().getResult());
180 } catch (InterruptedException | ExecutionException e) {
181 LOG.error("Error checking response code of service create", e);
183 // Connections and states should be created/updated when the pce and renderer are done :)
184 Map<EndPointKey, EndPoint> endPointList = createEndPoints(input.getEndPoint());
185 Name name = new NameBuilder()
186 .setValueName("Connectivity Service Name")
187 .setValue(serviceUuid.getValue())
189 ConnectivityService service = new ConnectivityServiceBuilder()
190 .setUuid(serviceUuid)
191 .setAdministrativeState(AdministrativeState.LOCKED)
192 .setOperationalState(OperationalState.DISABLED)
193 .setLifecycleState(LifecycleState.PLANNED)
194 .setServiceLayer(input.getConnectivityConstraint().getServiceLayer())
195 .setServiceLevel(input.getConnectivityConstraint().getServiceLevel())
196 .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY)
197 .setConnectivityDirection(ForwardingDirection.BIDIRECTIONAL)
198 .setName(Map.of(name.key(), name))
199 .setConnection(new HashMap<>())
200 .setEndPoint(endPointList)
202 // add to tapi context
203 this.tapiContext.updateConnectivityContext(Map.of(service.key(), service), new HashMap<>());
204 LOG.info("Created locked service in Datastore. Waiting for PCE and Renderer to complete tasks...");
205 // return ConnectivityServiceCreateOutput
206 return RpcResultBuilder.success(new CreateConnectivityServiceOutputBuilder()
207 .setService(new ServiceBuilder(service).build()).build()).buildFuture();
212 public ListenableFuture<RpcResult<GetConnectivityServiceDetailsOutput>> getConnectivityServiceDetails(
213 GetConnectivityServiceDetailsInput input) {
214 // TODO Auto-generated method stub
215 Uuid serviceUuid = getUuidFromIput(input.getServiceIdOrName());
216 ConnectivityService service = this.tapiContext.getConnectivityService(serviceUuid);
217 if (service == null) {
218 LOG.error("Service {} doesnt exist in tapi context", input.getServiceIdOrName());
219 return RpcResultBuilder.<GetConnectivityServiceDetailsOutput>failed()
220 .withError(ErrorType.RPC, "Service doesnt exist in datastore")
223 return RpcResultBuilder.success(new GetConnectivityServiceDetailsOutputBuilder().setService(
224 new org.opendaylight.yang.gen.v1.urn
225 .onf.otcc.yang.tapi.connectivity.rev181210.get.connectivity.service.details.output.ServiceBuilder(
226 service).build()).build()).buildFuture();
230 public ListenableFuture<RpcResult<UpdateConnectivityServiceOutput>> updateConnectivityService(
231 UpdateConnectivityServiceInput input) {
232 // TODO Auto-generated method stub. More complicated as it depends on what needs to be updated... left aside
237 public ListenableFuture<RpcResult<GetConnectionDetailsOutput>> getConnectionDetails(
238 GetConnectionDetailsInput input) {
239 // TODO Auto-generated method stub
240 Uuid connectionUuid = getUuidFromIput(input.getConnectionIdOrName());
241 Connection connection = this.tapiContext.getConnection(connectionUuid);
242 if (connection == null) {
243 LOG.error("Connection {} doesnt exist in tapi context", input.getConnectionIdOrName());
244 return RpcResultBuilder.<GetConnectionDetailsOutput>failed()
245 .withError(ErrorType.RPC, "Connection doesnt exist in datastore")
248 return RpcResultBuilder.success(new GetConnectionDetailsOutputBuilder().setConnection(
249 new ConnectionBuilder(connection).build()).build()).buildFuture();
253 public ListenableFuture<RpcResult<DeleteConnectivityServiceOutput>> deleteConnectivityService(
254 DeleteConnectivityServiceInput input) {
255 //TODO Auto-generated method stub
257 if (input.getServiceIdOrName() != null) {
259 Uuid serviceUuid = getUuidFromIput(input.getServiceIdOrName());
260 this.tapiContext.deleteConnectivityService(serviceUuid);
261 ListenableFuture<RpcResult<ServiceDeleteOutput>> output =
262 this.serviceHandler.serviceDelete(new ServiceDeleteInputBuilder()
263 .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
264 .setServiceName(input.getServiceIdOrName())
265 .setTailRetention(ServiceDeleteReqInfo.TailRetention.No)
267 .setSdncRequestHeader(new SdncRequestHeaderBuilder()
268 .setRequestId("request-1")
269 .setNotificationUrl("notification url")
270 .setRequestSystemId("appname")
271 .setRpcAction(RpcActions.ServiceDelete)
274 RpcResult<ServiceDeleteOutput> rpcResult = output.get();
275 if (!rpcResult.getResult().getConfigurationResponseCommon().getResponseCode()
276 .equals(ResponseCodes.RESPONSE_FAILED)) {
277 LOG.info("Service is being deleted and devices are being rolled back");
278 return RpcResultBuilder.success(new DeleteConnectivityServiceOutputBuilder().build()).buildFuture();
280 LOG.error("Failed to delete service. Deletion process failed");
281 } catch (InterruptedException | ExecutionException e) {
282 LOG.error("Failed to delete service.", e);
285 return RpcResultBuilder.<DeleteConnectivityServiceOutput>failed()
286 .withError(ErrorType.RPC, "Failed to delete Service")
291 public ListenableFuture<RpcResult<GetConnectivityServiceListOutput>> getConnectivityServiceList(
292 GetConnectivityServiceListInput input) {
293 // TODO Auto-generated method stub
294 Map<ConnectivityServiceKey, ConnectivityService> connMap = this.tapiContext.getConnectivityServices();
295 if (connMap == null) {
296 LOG.error("No services in tapi context");
297 return RpcResultBuilder.<GetConnectivityServiceListOutput>failed()
298 .withError(ErrorType.RPC, "No services exist in datastore")
302 Map<ServiceKey, Service> serviceMap = new HashMap<>();
303 for (ConnectivityService connectivityService: connMap.values()) {
304 Service service = new org.opendaylight.yang.gen.v1.urn
305 .onf.otcc.yang.tapi.connectivity.rev181210.get.connectivity.service.list.output.ServiceBuilder(
306 connectivityService).build();
307 serviceMap.put(service.key(), service);
309 return RpcResultBuilder.success(new GetConnectivityServiceListOutputBuilder().setService(serviceMap)
310 .build()).buildFuture();
314 public ListenableFuture<RpcResult<GetConnectionEndPointDetailsOutput>> getConnectionEndPointDetails(
315 GetConnectionEndPointDetailsInput input) {
316 // TODO Auto-generated method stub
317 Uuid topoUuid = getUuidFromIput(input.getTopologyIdOrName());
318 Uuid nodeUuid = getUuidFromIput(input.getNodeIdOrName());
319 Uuid nepUuid = getUuidFromIput(input.getNepIdOrName());
320 Uuid cepUuid = getUuidFromIput(input.getCepIdOrName());
321 ConnectionEndPoint cep = this.tapiContext.getTapiCEP(topoUuid, nodeUuid, nepUuid, cepUuid);
323 LOG.error("Cep doesnt exist in tapi context");
324 return RpcResultBuilder.<GetConnectionEndPointDetailsOutput>failed()
325 .withError(ErrorType.RPC, "No cep with given Uuid exists in datastore")
328 return RpcResultBuilder.success(new GetConnectionEndPointDetailsOutputBuilder().setConnectionEndPoint(
329 new ConnectionEndPointBuilder(cep).build()).build()).buildFuture();
332 public ImmutableClassToInstanceMap<Rpc<?, ?>> registerRPCs() {
333 return ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
334 .put(CreateConnectivityService.class, this::createConnectivityService)
335 .put(GetConnectivityServiceDetails.class, this::getConnectivityServiceDetails)
336 .put(UpdateConnectivityService.class, this::updateConnectivityService)
337 .put(GetConnectionDetails.class, this::getConnectionDetails)
338 .put(DeleteConnectivityService.class, this::deleteConnectivityService)
339 .put(GetConnectivityServiceList.class, this::getConnectivityServiceList)
340 .put(GetConnectionEndPointDetails.class, this::getConnectionEndPointDetails)
344 private Map<EndPointKey, EndPoint> createEndPoints(
345 Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210
346 .create.connectivity.service.input.EndPointKey,
347 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210
348 .create.connectivity.service.input.EndPoint> endPoints) {
349 Map<EndPointKey, EndPoint> endPointMap = new HashMap<>();
350 for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210
351 .create.connectivity.service.input.EndPoint ep: endPoints.values()) {
352 EndPoint endpoint = new EndPointBuilder()
353 .setServiceInterfacePoint(new ServiceInterfacePointBuilder()
354 .setServiceInterfacePointUuid(ep.getServiceInterfacePoint().getServiceInterfacePointUuid())
356 .setName(ep.getName())
357 .setAdministrativeState(ep.getAdministrativeState())
358 .setDirection(ep.getDirection())
359 .setLifecycleState(ep.getLifecycleState())
360 .setOperationalState(ep.getOperationalState())
361 .setLayerProtocolName(ep.getLayerProtocolName())
362 // TODO: implement bandwidth profile
363 .setCapacity(new CapacityBuilder()
364 .setTotalSize(new TotalSizeBuilder().build())
365 .setBandwidthProfile(new BandwidthProfileBuilder().build())
367 .setProtectionRole(ep.getProtectionRole())
368 .setRole(ep.getRole())
369 .setLocalId(ep.getLocalId())
371 endPointMap.put(endpoint.key(), endpoint);
376 private Uuid getUuidFromIput(String serviceIdOrName) {
378 UUID.fromString(serviceIdOrName);
379 LOG.info("Given attribute {} is a UUID", serviceIdOrName);
380 return new Uuid(serviceIdOrName);
381 } catch (IllegalArgumentException e) {
382 LOG.info("Given attribute {} is not a UUID", serviceIdOrName);
383 return new Uuid(UUID.nameUUIDFromBytes(serviceIdOrName.getBytes(StandardCharsets.UTF_8)).toString());